Skip to content

Commit 9a355f2

Browse files
committed
Merge pull request #3 from joneshf/apply-bind
Updated for changes in prelude.
2 parents 43c9dc7 + 103863b commit 9a355f2

File tree

5 files changed

+50
-37
lines changed

5 files changed

+50
-37
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
/externs/
33
/node_modules/
44
/bower_components/
5+
/output/

src/Control/Applicative.purs

Lines changed: 0 additions & 18 deletions
This file was deleted.

src/Control/Apply.purs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
module Control.Apply where
2+
3+
infixl 4 <*
4+
infixl 4 *>
5+
6+
(<*) :: forall a b f. (Apply f) => f a -> f b -> f a
7+
(<*) a b = const <$> a <*> b
8+
9+
(*>) :: forall a b f. (Apply f) => f a -> f b -> f b
10+
(*>) a b = const id <$> a <*> b
11+
12+
lift2 :: forall a b c f. (Apply f) => (a -> b -> c) -> f a -> f b -> f c
13+
lift2 f a b = f <$> a <*> b
14+
15+
lift3 :: forall a b c d f. (Apply f) => (a -> b -> c -> d) -> f a -> f b -> f c -> f d
16+
lift3 f a b c = f <$> a <*> b <*> c
17+
18+
lift4 :: forall a b c d e f. (Apply f) => (a -> b -> c -> d -> e) -> f a -> f b -> f c -> f d -> f e
19+
lift4 f a b c d = f <$> a <*> b <*> c <*> d
20+
21+
lift5 :: forall a b c d e f g. (Apply f) => (a -> b -> c -> d -> e -> g) -> f a -> f b -> f c -> f d -> f e -> f g
22+
lift5 f a b c d e = f <$> a <*> b <*> c <*> d <*> e
23+
24+
forever :: forall a b f. (Apply f) => f a -> f b
25+
forever a = a *> forever a

src/Control/Bind.purs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
module Control.Bind where
2+
3+
infixr 1 =<<
4+
infixr 1 >=>
5+
infixr 1 <=<
6+
7+
(=<<) :: forall a b m. (Bind m) => (a -> m b) -> m a -> m b
8+
(=<<) f m = m >>= f
9+
10+
(>=>) :: forall a b c m. (Bind m) => (a -> m b) -> (b -> m c) -> a -> m c
11+
(>=>) f g a = f a >>= g
12+
13+
(<=<) :: forall a b c m. (Bind m) => (b -> m c) -> (a -> m b) -> a -> m c
14+
(<=<) f g a = f =<< g a
15+
16+
join :: forall a m. (Bind m) => m (m a) -> m a
17+
join m = m >>= id
18+
19+
ifM :: forall a m. (Bind m) => m Boolean -> m a -> m a -> m a
20+
ifM cond t f = cond >>= \cond' -> if cond' then t else f

src/Control/Monad.purs

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,20 @@
11
module Control.Monad where
22

3-
import Prelude
4-
import Data.Array
5-
63
replicateM :: forall m a. (Monad m) => Number -> m a -> m [a]
74
replicateM 0 _ = return []
85
replicateM n m = do
96
a <- m
107
as <- replicateM (n - 1) m
118
return (a : as)
129

13-
infixr 1 >=>
14-
infixr 1 <=<
15-
16-
(>=>) :: forall m a b c. (Monad m) => (a -> m b) -> (b -> m c) -> a -> m c
17-
(>=>) f g a = do
18-
b <- f a
19-
g b
20-
21-
(<=<) :: forall m a b c. (Monad m) => (b -> m c) -> (a -> m b) -> a -> m c
22-
(<=<) = flip (>=>)
23-
24-
join :: forall m a. (Monad m) => m (m a) -> m a
25-
join mm = do
26-
m <- mm
27-
m
28-
2910
foldM :: forall m a b. (Monad m) => (a -> b -> m a) -> a -> [b] -> m a
3011
foldM _ a [] = return a
3112
foldM f a (b:bs) = f a b >>= \a' -> foldM f a' bs
3213

3314
when :: forall m. (Monad m) => Boolean -> m {} -> m {}
3415
when true m = m
3516
when false _ = return {}
17+
18+
unless :: forall m. (Monad m) => Boolean -> m {} -> m {}
19+
unless false m = m
20+
unless true _ = return {}

0 commit comments

Comments
 (0)