在 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
在使用镜头时使用,并在其他高阶函数中使用。
我的问题是(除了明显的类型系统差异) Clojure 中的函数是否与Haskellidentity
中的函数具有相同的用途和目的?id
为什么我要问的是,当我查看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)))))
所以我觉得我错过了一些东西。