summaryrefslogtreecommitdiff
path: root/Haskell-book/18/Functions.hs
blob: 841ecbd7efcb0cacda790466fee74dd567e3677d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
module Functions where

j :: Monad m => m (m a) -> m a
j = flip (>>=) id

l1 :: Monad m => (a -> b) -> m a -> m b
l1 = fmap

l2 :: Monad m => (a -> b -> c) -> m a -> m b -> m c
l2 f xs ys = f <$> xs <*> ys

a :: Monad m => m a -> m (a -> b) -> m b
a xs f = f <*> xs

meh :: Monad m => [a] -> (a -> m b) -> m [b]
meh xs f = rec $ fmap f xs
    where rec [] = return []
          rec (x:xs) = (:) <$> x <*> (rec xs)

flipType :: Monad m => [m a] -> m [a]
flipType = flip meh id