haskell - What does exactly Identity functor do? -


it may trivial, don't understand following mean.

instance functor identity     fmap     = coerce 

so, can try define similar:

prelude control.lens data.functor.identity> :t fmap fmap :: functor f => (a -> b) -> f -> f b prelude control.lens data.functor.identity> let z f g = coerce f g prelude control.lens data.functor.identity> :t z z :: contravariant ((->) t) => (t -> a) -> t -> b 

but, mean in simpler terms?

the use of coerce new in ghc 7.10 , done efficiency. "real" definition is

fmap :: (a -> b) -> (identity -> identity b) fmap f (identity a) = identity (f a) 

the wrapping/unwrapping of identity constructor should optimized away @ compile time, seems base devs had reason ensure there no performance penalty using coerce.

the reason can use coerce identity a isomorphic (the same as) a, can coerce a -> b identity -> identity b happens definition of fmap specialized identity!


Comments

Popular posts from this blog

java - Custom OutputStreamAppender not run: LOGBACK: No context given for <MYAPPENDER> -

java - UML - How would you draw a try catch in a sequence diagram? -

c++ - No viable overloaded operator for references a map -