on master help sign in
Applicative and Functor instances for CGI.
09615d5startling
lib/Network/Cgi.idr+11
@@ -27,6 +27,17 @@ data CGI : Set -> Set where
27getAction : CGI a -> CGIInfo -> IO (a, CGIInfo)
27getAction : CGI a -> CGIInfo -> IO (a, CGIInfo)
28getAction (MkCGI act) = act
28getAction (MkCGI act) = act
29
29
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+
30instance Monad CGI where {
41instance Monad CGI where {
31 (>>=) (MkCGI f) k = MkCGI (\s => do v <- f s
42 (>>=) (MkCGI f) k = MkCGI (\s => do v <- f s
32 getAction (k (fst v)) (snd v))
43 getAction (k (fst v)) (snd v))