Skip to content

Instantly share code, notes, and snippets.

@dewey92
Last active April 25, 2018 20:03
Show Gist options
  • Select an option

  • Save dewey92/fb3a36073f71fba9617abef5d0b83231 to your computer and use it in GitHub Desktop.

Select an option

Save dewey92/fb3a36073f71fba9617abef5d0b83231 to your computer and use it in GitHub Desktop.
My Reader Monad Oop Impl
interface IReader<D, A> {
map<B>(f: (value: A) => B): IReader<D, B>,
flatMap<B>(f: (value: A) => IReader<D, B>): IReader<D, B>,
run(deps: D): A
}
const Reader = <D, A>(fn: (deps: D) => A): IReader<D, A> => {
const run = (deps: D) => fn(deps);
return {
map: f => Reader((deps: D) => f(run(deps))),
flatMap: f => Reader((deps: D) => f(run(deps)).run(deps)),
run
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment