|
|
|
|
|
by karmakaze
2050 days ago
|
|
Not possible, but an approximation: interface Mappable<P extends Mappable<P, unknown>, T> {
flatMap<U>(f: (x: T) => Mappable<P, U>): Mappable<P, U>;
}
class Maybe<T> implements Mappable<Maybe<unknown>, T> {
x: T | undefined;
public flatMap<U>(f: (x: T) => Maybe<U>): Maybe<U> {
if (this.x) {
return f(this.x);
}
return Maybe.nothing();
}
}
|
|
[1]: https://www.cl.cam.ac.uk/~jdy22/papers/lightweight-higher-ki... [2]: https://github.com/gcanti/fp-ts [3]: https://gist.github.com/gcanti/2b455c5008c2e1674ab3e8d5790cd...