Last active
May 16, 2019 10:23
-
-
Save maciejsikora/5d0d491dd4d2780858e542b1a8348f48 to your computer and use it in GitHub Desktop.
Maybe Monad
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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