1-- | 2-- Module : Basement.Compat.Identity 3-- License : BSD-style 4-- Maintainer : Vincent Hanquez <vincent@snarc.org> 5-- Stability : experimental 6-- Portability : portable 7-- 8-- Identity re-export, with a compat wrapper for older version of base that 9-- do not have Data.Functor.Identity 10{-# LANGUAGE CPP #-} 11module Basement.Compat.Identity 12 ( Identity(..) 13 ) where 14 15#if MIN_VERSION_base(4,8,0) 16 17import Data.Functor.Identity 18 19#else 20 21import Basement.Compat.Base 22 23newtype Identity a = Identity { runIdentity :: a } 24 deriving (Eq, Ord) 25 26instance Functor Identity where 27 fmap f (Identity a) = Identity (f a) 28 29instance Applicative Identity where 30 pure a = Identity a 31 (<*>) fab fa = Identity $ runIdentity fab (runIdentity fa) 32 33instance Monad Identity where 34 return = pure 35 ma >>= mb = mb (runIdentity ma) 36 37#endif 38