Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does the chain function in underscore.js create a monad?

In the chain documentation you find:

Calling chain on a wrapped object will cause all future method calls to return wrapped objects as well. When you've finished the computation, use value to retrieve the final value.

So does the chain function create a monad?

like image 968
jcubic Avatar asked May 03 '12 13:05

jcubic


1 Answers

No, not a monad, but a comonad! It turns a function that takes a wrapped object and returns a normal value into a function that both takes and returns a wrapped object. As a Haskell type signature that would be:

(Wrapped a -> b) -> (Wrapped a -> Wrapped b) 

The type signature of value is:

Wrapped a -> a 

These are precisely what you need for a comonad. The first function is usually called extend and the second extract.

You can think of a comonad as a value with some extra context. And that is of course exactly what chain does.

See this Stackoverflow question for more about comonads.

like image 200
Sjoerd Visscher Avatar answered Sep 28 '22 04:09

Sjoerd Visscher