Monads

Our last abstraction will solve the very problem that we raised in the previous section—how to safely perform intermediate calculations by preserving the semantics of the abstractions that we're working with (in this case, options).

It should be no surprise by now that fluokitten also provides a protocol for monads, simplified and shown as follows:

(defprotocol Monad (bind [mv g])) 

If you think in terms of a class hierarchy, monads would be at the bottom of it, inheriting from applicative functors, which, in turn, inherit from functors. That is, if you're working with a monad, you can assume that it is also an applicative and a functor.

The bind function of monads takes a function, g, as its second argument. This function receives ...

Get Hands-On Reactive Programming with Clojure - Second Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.