Skip to content

Commit bc2681a

Browse files
committed
Started updating for changes to hierarchy.
1 parent c168ced commit bc2681a

File tree

4 files changed

+34
-80
lines changed

4 files changed

+34
-80
lines changed

src/Control/Applicative.purs

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

src/Control/Apply.purs

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,25 @@
11
module Control.Apply where
22

3-
-- This should currently replace everything in Control.Applicative.
4-
-- Ideally it would be its superclass.
3+
infixl 4 <*
4+
infixl 4 *>
55

6-
infixl 4 <.
7-
infixl 4 .>
6+
(<*) :: forall a b f. (Apply f) => f a -> f b -> f a
7+
(<*) a b = const <$> a <*> b
88

9-
-- This should be a subclass of Functor.
10-
class Apply f where
11-
-- Until we get default implementations, use `<.>` as `<*>`
12-
(<.>) :: forall a b. (Functor f) => f (a -> b) -> f a -> f b
9+
(*>) :: forall a b f. (Apply f) => f a -> f b -> f b
10+
(*>) a b = const id <$> a <*> b
1311

14-
(<.) :: forall a b f. (Apply f, Functor f) => f a -> f b -> f a
15-
(<.) a b = const <$> a <.> b
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
1614

17-
(.>) :: forall a b f. (Apply f, Functor f) => f a -> f b -> f b
18-
(.>) a b = const id <$> a <.> b
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
1917

20-
lift2 :: forall a b c f. (Apply f, Functor f) => (a -> b -> c) -> f a -> f b -> f c
21-
lift2 f a b = f <$> a <.> b
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
2220

23-
lift3 :: forall a b c d f. (Apply f, Functor f) => (a -> b -> c -> d) -> f a -> f b -> f c -> f d
24-
lift3 f a b c = f <$> a <.> b <.> c
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: 13 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,20 @@
11
module Control.Bind where
22

3-
-- This should replace most things in Control.Monad.
4-
-- Ideally it would be its superclass.
3+
infixr 1 =<<
4+
infixr 1 >=>
5+
infixr 1 <=<
56

6-
infixl 1 >>-
7+
(=<<) :: forall a b m. (Bind m) => (a -> m b) -> m a -> m b
8+
(=<<) f m = m >>= f
79

8-
import Control.Apply
10+
(>=>) :: forall a b c m. (Bind m) => (a -> m b) -> (b -> m c) -> a -> m c
11+
(>=>) f g a = f a >>= g
912

10-
-- This should be a subclass of Apply
11-
class Bind m where
12-
-- We should be able to provide either one of these and derive the other.
13-
(>>-) :: forall a b. (Apply m) => m a -> (a -> m b) -> m b
14-
-- (>>-) m f = join (f <$> m)
15-
join :: forall a. (Apply m) => m (m a) -> m a
16-
-- join m = m >>- id
13+
(<=<) :: forall a b c m. (Bind m) => (b -> m c) -> (a -> m b) -> a -> m c
14+
(<=<) f g a = f =<< g a
1715

18-
instance applyFromBind :: (Bind m) => Apply m where
19-
(<.>) f a = f >>- \f' -> f' <$> a
16+
join :: forall a m. (Bind m) => m (m a) -> m a
17+
join m = m >>= id
2018

21-
(-<<) :: forall a b m. (Apply m, Bind m) => (a -> m b) -> m a -> m b
22-
(-<<) f m = m >>- f
23-
24-
(>->) :: forall a b c m. (Apply m, Bind m) => (a -> m b) -> (b -> m c) -> a -> m c
25-
(>->) f g a = f a >>- g
26-
27-
(<-<) :: forall a b c m. (Apply m, Bind m) => (b -> m c) -> (a -> m b) -> a -> m c
28-
(<-<) f g a = f -<< g a
29-
30-
ifM :: forall a m. (Apply m, Bind m) => m Boolean -> m a -> m a -> m a
31-
ifM cond t f = cond >>- \cond' -> if cond' then t else f
32-
33-
forever :: forall a b m. (Apply m, Functor m, Bind m) => m a -> m b
34-
forever a = a .> forever a
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)