@@ -1,10 +1,20 @@
1module Control.Monad.Identity
1module Control.Monad.Identity
4+import Prelude.Applicative
3import Prelude.Monad
5import Prelude.Monad
5public record Identity : Set -> Set where
7public record Identity : Set -> Set where
6 Id : (runIdentity : a) -> Identity a
8 Id : (runIdentity : a) -> Identity a
10+instance Functor Identity where
11+ fmap fn (Id a) = Id (fn a)
13+instance Applicative Identity where
16+ (Id f) <$> (Id g) = Id (f g)
8instance Monad Identity where
18instance Monad Identity where
9 return x = Id x
19 return x = Id x
10 (Id x) >>= k = k x
20 (Id x) >>= k = k x