Clojure中的identity函数与Haskell中的id函数具有相同的用法和用途吗?

haw*_*eye 8 haskell identity clojure lenses

在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))
Run Code Online (Sandbox Code Playgroud)

从我在Haskell中看到的内容 - id 在使用镜头时使用,并用于其他更高阶的功能.

我的问题是(除了明显的类型系统的差异)是否identityClojure中的函数具有相同用途和目的为id在Haskell功能?

为什么我要问的是当我在Clojure中查看以下Lens的示例时- 我们看到的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)))))
Run Code Online (Sandbox Code Playgroud)

所以我觉得我错过了什么.

Don*_*art 7

id在Haskell功能是演算的我的组合子.它是trival函数:

-- | Identity function.
id :: a -> a
id x = x
Run Code Online (Sandbox Code Playgroud)

这是非常有用的是0或空列表是有用的方式.

identityClojure中的函数是等效的,因为它返回其参数未经修改.

(defn identity
  "Returns its argument."
  {:added "1.0"
   :static true}
  [x] x)
Run Code Online (Sandbox Code Playgroud)

其他概念例如Identitymonad等与该id功能没有直接关系.