0 | module Control.Monad.Identity
9 | record Identity (a : Type) where
14 | Functor Identity where
15 | map fn (Id a) = Id (fn a)
18 | Applicative Identity where
20 | (Id f) <*> (Id g) = Id (f g)
23 | Monad Identity where
27 | Foldable Identity where
28 | foldr f init (Id x) = f x init
29 | foldl f init (Id x) = f init x
31 | foldlM f init (Id x) = f init x
33 | foldMap f (Id x) = f x
36 | Traversable Identity where
37 | traverse f (Id x) = Id <$> f x
40 | Show a => Show (Identity a) where
41 | showPrec d (Id x) = showCon d "Id" $
showArg x
44 | Eq a => Eq (Identity a) where
45 | (Id x) == (Id y) = x == y
48 | Ord a => Ord (Identity a) where
49 | compare (Id x) (Id y) = compare x y
58 | Semigroup a => Semigroup (Identity a) where
59 | (<+>) x y = Id (runIdentity x <+> runIdentity y)
62 | Monoid a => Monoid (Identity a) where
63 | neutral = Id (neutral)
66 | Num a => Num (Identity a) where
67 | Id x + Id y = Id (x + y)
68 | Id x * Id y = Id (x * y)
69 | fromInteger = Id . fromInteger
72 | Neg a => Neg (Identity a) where
73 | negate (Id x) = Id (negate x)
74 | Id x - Id y = Id (x - y)
77 | Abs a => Abs (Identity a) where
78 | abs (Id x) = Id (abs x)
81 | Fractional a => Fractional (Identity a) where
82 | recip (Id x) = Id (recip x)
83 | Id x / Id y = Id (x / y)
86 | Integral a => Integral (Identity a) where
87 | Id x `div` Id y = Id (x `div` y)
88 | Id x `mod` Id y = Id (x `mod` y)
91 | Bits a => Bits (Identity a) where
93 | Id x .&. Id y = Id (x .&. y)
94 | Id x .|. Id y = Id (x .|. y)
95 | Id x `xor` Id y = Id (x `xor` y)
96 | shiftL (Id v) ix = Id (shiftL v ix)
97 | shiftR (Id v) ix = Id (shiftR v ix)
99 | zeroBits = Id zeroBits
100 | complement (Id v) = Id (complement v)
101 | oneBits = Id oneBits
102 | complementBit (Id v) ix = Id (complementBit v ix)
103 | clearBit (Id v) ix = Id (clearBit v ix)
104 | testBit (Id v) ix = testBit v ix
105 | setBit (Id v) ix = Id (setBit v ix)
108 | FromString a => FromString (Identity a) where
109 | fromString = Id . fromString