@@ -27,6 +27,17 @@ data CGI : Set -> Set where
2727getAction : CGI a -> CGIInfo -> IO (a, CGIInfo)
2828getAction (MkCGI act) = act
2929
30+instance Functor CGI where
31+ fmap f (MkCGI c) = MkCGI (\s => do (a, i) <- c s
32+ return (f a, i))
33+
34+instance Applicative CGI where
35+ pure v = MkCGI (\s => return (v, s))
36+
37+ (MkCGI a) <$> (MkCGI b) = MkCGI (\s => do (f, i) <- a s
38+ (c, j) <- b i
39+ return (f c, j))
40+
3041instance Monad CGI where {
3142 (>>=) (MkCGI f) k = MkCGI (\s => do v <- f s
3243 getAction (k (fst v)) (snd v))