Identity 是个 Functor 的实例。从定义上看,只是用了个盒子把值包了起来, fmap 相当于什么都没有做,简单的将里面的值拿出来,然后应用 f ,再把 结果放回到盒子中。代表了一个不含任何额外上下文信息的盒子。

newtype Identity a = Identity { runIdentity :: a }
 
instance Functor Identity where
	fmap f = Identity . f . runIdentity