Skip to content

Commit 32cfb0c

Browse files
committed
Use a local version of Identity on old versions of base
1 parent c7f8361 commit 32cfb0c

File tree

1 file changed

+34
-2
lines changed

1 file changed

+34
-2
lines changed

Data/IntMap/Merge/Internal.hs

+34-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
{-# LANGUAGE BangPatterns #-}
1+
{-# LANGUAGE CPP, BangPatterns #-}
2+
3+
#include "containers.h"
24

35
-----------------------------------------------------------------------------
46
-- |
@@ -30,10 +32,40 @@
3032
module Data.IntMap.Merge.Internal where
3133

3234
import Prelude hiding (min, max)
33-
import Data.Functor.Identity (Identity, runIdentity)
3435

3536
import Data.IntMap.Internal
3637

38+
#if MIN_VERSION_base (4,8,0)
39+
import Data.Functor.Identity (Identity, runIdentity)
40+
#else
41+
import Control.Applicative (Applicative(..))
42+
#endif
43+
44+
#if __GLASGOW_HASKELL__ >= 708
45+
import Data.Coerce
46+
#endif
47+
48+
49+
#if MIN_Version_base (4,8,0)
50+
-- | The identity type.
51+
newtype Identity a = Identity { runIdentity :: a }
52+
53+
#if __GLASGOW_HASKELL__ >= 708
54+
instance Functor Identity where
55+
fmap = coerce
56+
instance Applicative Identity where
57+
(<*>) = coerce
58+
pure = Identity
59+
#else
60+
instance Functor Identity where
61+
fmap f (Identity a) = Identity (f a)
62+
instance Applicative Identity where
63+
Identity f <*> Identity x = Identity (f x)
64+
pure = Identity
65+
#endif
66+
#endif
67+
68+
3769
-- | A tactic for dealing with keys present in one map but not the other in
3870
-- 'merge' or 'mergeA'.
3971
--

0 commit comments

Comments
 (0)