In Clojure abbiamo la funzione identity
. E 'is used as follows:La funzione di identità in Clojure ha lo stesso uso e lo stesso scopo della funzione id in 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))
Da quello che posso vedere in Haskell - id
is used when using lenses ed è used in other higher order functions.
La mia domanda è (a parte le ovvie differenze di sistema Type) funziona il identity
in Clojure hanno lo stesso uso e scopo come la funzione id
in Haskell?
Perché mi chiedo è quando guardo the following example di un Lens in Clojure - vediamo Id
definito in termini di 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)))))
quindi mi sento come mi manca qualcosa.
La definizione di 'Id' in clojure è uguale al funcector 'Identity' in Haskell. – bennofs