module Control.Applicative.Identity where import Control.Applicative import Prelude newtype Identity a = Identity { forall a. Identity a -> a runIdentity :: a } instance Functor Identity where fmap :: forall a b. (a -> b) -> Identity a -> Identity b fmap a -> b f (Identity a x) = b -> Identity b forall a. a -> Identity a Identity (a -> b f a x) instance Applicative Identity where pure :: forall a. a -> Identity a pure = a -> Identity a forall a. a -> Identity a Identity Identity a -> b f <*> :: forall a b. Identity (a -> b) -> Identity a -> Identity b <*> Identity a x = b -> Identity b forall a. a -> Identity a Identity (a -> b f a x)