UNPKG

moy-fp

Version:
47 lines (44 loc) 926 B
/** * IO is a Functor, Monad and Applicative * can map * can join * can chain * can ap * always use for IO(input and output) and side effects * you may not need it if you are not sensitive in functional programming */ const IO = unsafePerformIO => Object.seal( Object.create(null, { unsafePerformIO: { value: unsafePerformIO, }, [Symbol.toStringTag]: { value: 'IO', }, map: { value: function map(fn){ return IO(() => fn(this.unsafePerformIO())) }, }, join: { value: function join(){ return this.chain(x => x) }, }, chain: { value: function chain(fn){ return IO(() => fn(this.unsafePerformIO()).unsafePerformIO()) }, }, ap: { value: function ap(I){ return this.chain(fn => I.map(fn)) }, }, }) ) /** * Functor IO => a -> IO a */ IO.of = x => IO(() => x) export default IO