Have ideas to improve npm?Join in the discussion! »

    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 }

    Install

    npm i do-notation

    DownloadsWeekly Downloads

    2

    Version

    1.0.5

    License

    MIT

    Last publish

    Collaborators

    • avatar