do-notation

1.0.5 • Public • Published

Do Notation

Build Status

Do notation for Fantasy Land monad types.

Fantasy Land

Examples

It uses yield to "unbox" the Monad (the <- in Haskell), which can then be transformed and fed to the next Monad in the Do block. The Do function returns the last Monad in the Do block:

const Do = require('do-notation')
 
let maybeString = Do(function*() {
  let foo = yield S.Maybe.of('foo')
  console.log(foo)
  // 'foo'
 
  let bar = yield S.Maybe.of('bar' + foo)
  console.log(bar)
  // 'barfoo'
 
  let baz = yield S.Maybe.of('baz' + bar)
  console.log(baz)
  // 'bazbarfoo'
 
}).toString()
 
console.log(maybeString)
// 'Just("bazbarfoo")'

Implementation

The entire implementation is very succinct and simple:

Do = function(generatorFunction) {
  const generator = generatorFunction()
 
  return function next(error, v) {
    const res = generator.next(v)
 
    if (res.done)
      return res.value
    else
      return res.value.chain((v) => next(null, v) || res.value.of(v))
  }()
}
 
module.exports = { Do: Do }

Package Sidebar

Install

npm i do-notation

Weekly Downloads

2

Version

1.0.5

License

MIT

Last publish

Collaborators

  • ristostevcev