Skip to content

Instantly share code, notes, and snippets.

@maciejsikora
Last active May 16, 2019 10:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maciejsikora/5d0d491dd4d2780858e542b1a8348f48 to your computer and use it in GitHub Desktop.
Save maciejsikora/5d0d491dd4d2780858e542b1a8348f48 to your computer and use it in GitHub Desktop.
Maybe Monad
class Just<Data> {
value: Data;
constructor(value: Data) {
this.value = value
}
fmap<NextData>(f: (x: Data) => NextData) {
return new Just<NextData>(f(this.value))
}
private flat() {
return this.value
}
flatMap<NextData>(f: (x: Data) => Maybe<NextData>): Maybe<NextData> {
return this.fmap(f).flat()
}
}
class Nothing {
fmap(f: (x: any) => any) {
return new Nothing()
}
flatMap(f: (x: any) => Maybe<any>): Maybe<any> {
return new Nothing()
}
}
type Maybe<Data> = Just<Data> | Nothing;
const something = new Just(1);
const val = something
.fmap(x => x + 1)
.fmap(x => x + 2)
.flatMap(x => new Nothing())
.flatMap((x:number) => new Just(x + 2))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment