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, usevalue
to retrieve the final value.
So does the chain
function create a monad?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With