There is a number of threading operators in Clojure, I was talking about them
recently. But there is one operator that is kinda interesting, since it
accidentally has similar semantics to Haskell’s fmap
/<$>
on the Maybe
monad and OCaml’s
BatOption.map/Core_kernel.Option.map.
Ok, now as I scared everybody faint of heart away using the M-word, let me
explain. Clojure of course does not have Option
types, Functors
or similar,
instead everything is a value or nil
(well, nil
is also a value, so this is
only an approximation). Looking at it from a slightly different perspective,
everything is an Option type, since the Just
/Some
part is the value and
the Nothing
/None
part is nil
(I am aware this is not an entirely correct
comparison).
Clojure also has a number of threading operators. Among these is also an
operator that threads a value through a sequence of functions only if the value
is not nil
, namely some->>
(and of course some->
), otherwise it returns
nil
. This sounds like an nifty addition to the Clojure zoo of threading
operators, but coincidentally is also very similar to how <$>
/fmap
/map
behave. Especially considering that some of the code I write or work with
every day often uses some->>
without threading at all:
1
|
|
Which is semantically very similar to Haskell:
1
|
|
Or in OCaml
1 2 |
|
So even if you use Clojure, you still benefit from cool functional programming concepts. They are maybe not that prominent but waiting to be used for great good!