1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
import Control.Exception
data Iterator i o m a where
NeedInput :: (i -> Iterator i o m a) -> Iterator i o m a
HasOutput :: o -> Iterator i o m a -> Iterator i o m a
NeedAction :: m (Iterator i o m a) -> Iterator i o m a
IsDone :: a -> Iterator i o m a
Error :: SomeException -> Iterator i o m a
feedPure :: [i] -> Iterator i o (forall m . m) a -> Iterator i o (forall m . m) a
feedPure = loop
where
loop [] iter = iter
loop (i:is) (NeedInput k) = loop is (k i)
loop is (HasOutput o k0) = HasOutput o (loop is k0)
loop is (NeedAction m) = undefined
loop _ (IsDone a) = IsDone a
loop _ (Error err) = Error err
feedPure' :: [i] -> Iterator i o (forall m . (m :: * -> *)) a -> Iterator i o (forall m . (m :: * -> *)) a
feedPure' = loop
where
loop [] iter = iter
loop (i:is) (NeedInput k) = loop is (k i)
loop is (HasOutput o k0) = HasOutput o (loop is k0)
loop is (NeedAction m) = undefined
loop _ (IsDone a) = IsDone a
loop _ (Error err) = Error err
|