blob: 6446fcc908bf8fccc5deb5650fcea89b2e2ff11d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
module TraversableT where
import Data.Traversable
import Control.Monad (join)
newtype TraversableT m t a = TraversableT { runTraversableT :: m (t a) }
instance (Monad m, Traversable t, Monad t) => Monad (TraversableT m t) where
return = TraversableT . return . return
m >>= k = TraversableT $ do
a <- runTraversableT m
b <- forM a $ runTraversableT . k
return (join b)
fail s = TraversableT $ return (fail s)
liftT :: Monad m => t a -> TraversableT m t a
liftT = TraversableT . return
liftMT :: m (t a) -> TraversableT m t a
liftMT = TraversableT
|