makefile fix and table with results so far added to ex3
[tt2015.git] / a3 / code / Generics / GenMonad.dcl
1 definition module GenMonad
2
3 import StdGeneric, StdMaybe, StdList
4
5 class Monad m where
6 ret :: a:a -> m:(m a:a), [m <= a]
7 (>>=) infixl 5 :: u:(m .a) v:(.a -> u:(m .b)) -> u:(m .b), [u <= v]
8
9 :: StMonad s a = { st_monad :: .(s -> *(a, s)) }
10 derive bimap StMonad
11 instance Monad Maybe, [], (StMonad .s)
12
13 generic gMapLM a b :: a:a -> m:(m b:b) | Monad m, [m <= b]
14 derive gMapLM c, PAIR, EITHER, CONS, FIELD, OBJECT
15 derive gMapLM [], Maybe, (,), (,,), (,,,), (,,,,), (,,,,,), (,,,,,,), (,,,,,,,)
16
17 generic gMapRM a b :: a:a -> m:(m b:b) | Monad m, [m <= b]
18 derive gMapRM c, PAIR, EITHER, CONS, FIELD, OBJECT
19 derive gMapRM [], Maybe, (,), (,,), (,,,), (,,,,), (,,,,,), (,,,,,,), (,,,,,,,)
20