on 6b192fb help sign in
43 lines 2.5 kB history raw
1------------------------------------------------------------------------------
2-- CPP macros for common instances
3------------------------------------------------------------------------------
5-- XXX use template haskell instead and include Monoid and IsStream instances
6-- as well.
8#define MONADPARALLEL , MonadAsync m
10#define MONAD_APPLICATIVE_INSTANCE(STREAM,CONSTRAINT) \
11instance (Monad m CONSTRAINT) => Applicative (STREAM m) where { \
12 pure = STREAM . K.yield; \
13 (<*>) = ap }
15#define MONAD_COMMON_INSTANCES(STREAM,CONSTRAINT) \
16instance Monad m => Functor (STREAM m) where { \
17 fmap = map }; \
18 \
19instance (MonadBase b m, Monad m CONSTRAINT) => MonadBase b (STREAM m) where {\
20 liftBase = liftBaseDefault }; \
21 \
22instance (MonadIO m CONSTRAINT) => MonadIO (STREAM m) where { \
23 liftIO = lift . liftIO }; \
24 \
25instance (MonadThrow m CONSTRAINT) => MonadThrow (STREAM m) where { \
26 throwM = lift . throwM }; \
27 \
28{- \
29instance (MonadError e m CONSTRAINT) => MonadError e (STREAM m) where { \
30 throwError = lift . throwError; \
31 catchError m h = \
32 fromStream $ withCatchError (toStream m) (\e -> toStream $ h e) }; \
33-} \
34 \
35instance (MonadReader r m CONSTRAINT) => MonadReader r (STREAM m) where { \
36 ask = lift ask; \
37 local f m = fromStream $ K.withLocal f (toStream m) }; \
38 \
39instance (MonadState s m CONSTRAINT) => MonadState s (STREAM m) where { \
40 get = lift get; \
41 put x = lift (put x); \
42 state k = lift (state k) }