In Clojure we have the identity
function. It is used as follows:
user=> (filter identity [1 2 3 nil 4 false true 1234])
(1 2 3 4 true 1234)
user=> (partition-by identity (sort "abcdaabccc"))
((\a \a \a) (\b \b) (\c \c \c \c) (\d))
From what I can see in Haskell - id
is used when using lenses and is used in other higher order functions.
My question is (apart from the obvious Type system differences) Does the identity
function in Clojure have the same usage and purpose as the id
function in Haskell?
Why I ask is when I look at the following example of a Lens in Clojure - we see Id
defined in terms of functor
:
(defprotocol Functor
(fmap [functor f] "fmap :: f a -> (a -> b) -> f b"))
;; data Id a = Id { runId :: a }
(defrecord Id [runId]
Functor
(fmap [functor f]
(Id. (f (:runId functor)))))
So I feel like I'm missing something.
Id
in clojure equals theIdentity
functor in Haskell. – Engrain