Monday, January 26, 2015

Discovering Monads

There is  plethora of tutorials on Monads.
What if for the initiation, simply expose the code without naming anything, neither
documenting.
Let us, just read the code and try to understand.

function init(v) {
  return function() {
      return v;
  }
}

function bind(wv, fn) {
    return fn(wv())
}

function addOne(x) {
    return x + 1
}

function mul2(x) {
    return x * 2
}

function sqrt(x) {
    return Math.sqrt(x)
}

function lift(f) {
    return function (val) {
        return init(f(val))
    }
}

function execute(lstf, value) {
    var nlstf = lstf.map(lift)
    return (nlstf.reduce(bind,init(value)))()  
}

var result = execute([addOne,sqrt,mul2],5)


Links
http://www.javascriptoo.com/monad-js
http://modernjavascript.blogspot.fr/2013/06/monads-in-plain-javascript.html
https://github.com/scottburch/functional