module Control.Applicative.Identity where

import Control.Applicative

import Prelude

newtype Identity a = Identity { Identity a -> a
runIdentity :: a }

instance Functor Identity where
  fmap :: (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 :: a -> Identity a
pure = a -> Identity a
forall a. a -> Identity a
Identity
  Identity a -> b
f <*> :: Identity (a -> b) -> Identity a -> Identity b
<*> Identity a
x = b -> Identity b
forall a. a -> Identity a
Identity (a -> b
f a
x)