В Clojure у нас есть функция identity
. Он is used as follows:Имеет ли функция идентификации в Clojure одинаковое использование и назначение, как функция id в Haskell?
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
is used when using lenses и used in other higher order functions.
Мой вопрос (помимо очевидных различий Тип системы) ли identity
функции в Clojure имеют одинаковое использование и назначение в качестве id
функции в Haskell?
Почему я спрашиваю, когда я смотрю на the following example из в Lens in 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. – bennofs