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.
The id
function in Haskell is the I combinator of lambda calculus. It is the trival function:
-- | Identity function.
id :: a -> a
id x = x
It is useful the way that 0 or the empty list are useful.
The identity
function in Clojure is equivalent in that it returns its argument unmodified.
(defn identity
"Returns its argument."
{:added "1.0"
:static true}
[x] x)
Other notions of e.g Identity
monads and so forth are not directly connected to the id
function.
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