Skip to content

Instantly share code, notes, and snippets.

View choonkending's full-sized avatar

Ken Ding choonkending

  • REA Group
  • Australia
View GitHub Profile
// https://medium.com/@gcanti/higher-kinded-types-in-typescript-static-and-fantasy-land-d41c361d0dbe
import {
TypeConstructors,
TypeConstructors2,
Kind,
Kind2,
} from "./higherKindedTypes";
export interface Functor<F extends TypeConstructors, A> {
class MyComponent extends React.Component {
render() {
return (
<div>
{this.props.children('Cruisin down the street')}
</div>
);
}
}

Use Case

/* @flow */
type Props = { foo: string };
const View = ({ foo }: Props) => <div>{ foo }</div>;

// Consumer renders View
map flatMap fold
Some(x)
const getUserFromLocalStorage = keyName => {
const str = localStorage.getItem(keyName);
try {
return Right(Option(JSON.parse(str)));
} catch (e) {
return Left("Invalid or Corrupted User Data");
}
};
const getUserFromLocalStorage = keyName => {
const str = localStorage.getItem(keyName);
try {
return Right(JSON.parse(str));
} catch (e) {
return Left("Invalid or Corrupted User Data");
}
};
const getUserFromLocalStorage = keyName => {
const str = localStorage.getItem(keyName);
try {
return JSON.parse(str);
} catch (e) {
return "Invalid or Corrupted User Data";
}
};
const transformCage = () => { /* ... */ };
const handleError = e => "Invalid or Corrupted User Data";
const handleSuccess = data => "Success";
const doSomethingWithUserData = () =>
getUserFromLocalStorage('nickCage')
.map(transformCage)
.fold(handleError, handleSuccess);
const transformCage = () => { /* ... */ };
const handleError = e => "failed to parse Cage";
const handleSuccess = data => "Success";
const ifEmpty = () => "Cage does not exist!";
const doSomethingWithUserData = () =>
getUserFromLocalStorage('nickCage')
.fold(handleError,
data =>
data.map(transformCage)