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