moy-fp
Version:
A functional programming library.
47 lines (44 loc) • 926 B
JavaScript
/**
* 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