В Clojure у нас есть функция identity
. Он используется следующим образом:
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))
Из того, что я вижу в Haskell - id
используется, когда с помощью линз и используется в других функциях более высокого порядка.
У меня вопрос (помимо очевидных различий в системе типов): Имеет ли функция identity
в Clojure такое же использование и назначение, что и функция id
в Haskell?
Почему я спрашиваю, так это когда смотрю на следующий пример Lens в Clojure — мы видим, что Id
определяется через 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)))))
Поэтому я чувствую, что что-то упускаю.
Id
в clojure эквивалентно функторуIdentity
в Haskell. - person bennofs   schedule 28.09.2014