42 lines
1,012 B
Haskell
42 lines
1,012 B
Haskell
{-# LANGUAGE BangPatterns #-}
|
|
{-# LANGUAGE DeriveDataTypeable #-}
|
|
{-# LANGUAGE TypeFamilies #-}
|
|
{-# LANGUAGE RebindableSyntax #-}
|
|
{-# LANGUAGE NoImplicitPrelude #-}
|
|
-- |
|
|
-- Module : Basement.Compat.Identity
|
|
-- License : BSD-style
|
|
-- Maintainer : Vincent Hanquez <vincent@snarc.org>
|
|
-- Stability : experimental
|
|
-- Portability : portable
|
|
--
|
|
-- Identity re-export, with a compat wrapper for older version of base that
|
|
-- do not have Data.Functor.Identity
|
|
{-# LANGUAGE CPP #-}
|
|
module Basement.Compat.Identity
|
|
( Identity(..)
|
|
) where
|
|
|
|
#if MIN_VERSION_base(4,8,0)
|
|
|
|
import Data.Functor.Identity
|
|
|
|
#else
|
|
|
|
import Basement.Compat.Base
|
|
|
|
newtype Identity a = Identity { runIdentity :: a }
|
|
deriving (Eq, Ord)
|
|
|
|
instance Functor Identity where
|
|
fmap f (Identity a) = Identity (f a)
|
|
|
|
instance Applicative Identity where
|
|
pure a = Identity a
|
|
(<*>) fab fa = Identity $ runIdentity fab (runIdentity fa)
|
|
|
|
instance Monad Identity where
|
|
return = pure
|
|
ma >>= mb = mb (runIdentity ma)
|
|
|
|
#endif
|