Home

Awesome

npm

Build Status

About this library

It is inspired by the mtl library in Haskell, but contains some JS-specific goodies.

About monad transformers

If you don't know what a monad transformer is, relax:

It is just a functor between two kleisi categories.

Joking. See this article.

Maybe you need to understand monads first, before you start with transformers. Read this book and/or see my other library.

Features

Quick tutorial

Call mtl.make to compose two or several types in a new type:

     var mtl = require('monad-transformers')
     var listMaybe = mtl.make(mtl.data.list, mtl.data.maybe)

Create an instance of the new type and use it.

      listMaybe.fromArray([{name: 'foo'}, {name: 'bar'}, {noname: 'baz'}])

Use the methods coming from the types that you composed:

      listMaybe.fromArray([{name: 'foo'}, {name: 'bar'}, {noname: 'baz'}])

        //Calling a 'maybe' method
        .maybeGet('name') // [maybe('foo'), maybe('bar'), maybe(undefined)]
        
        //Calling a 'list' method
        .filter(a => a.name !== 'bar') //[maybe('foo'), maybe(undefined)]
        
        //Calling a generic monad method
        .map((val)=>console.log(val)) //prints 'foo'

Slow tutorial

  1. Using the monad stack. Using the Task monad, the Maybe monad and the Writer monad.
  2. Using the monad stack. Using the Reader monad.
  3. Creating and using custom monads.

Docs