0 | module Text.Lex.Manual.Syntax
2 | import Text.Lex.Manual
8 | pure : a -> Tok False e a
9 | pure v cs = Succ v cs
12 | (>>=) : Tok b1 e a -> (a -> Tok b2 e b) -> Tok (b1 || b2) e b
14 | let Succ x cs1 @{q} := f cs | Fail x y z => Fail x y z
15 | in swapOr $
trans (g x cs1) q
18 | (>>) : Tok b1 e () -> Tok b2 e a -> Tok (b1 || b2) e a
20 | let Succ _ cs1 @{q} := f cs | Fail x y z => Fail x y z
21 | in swapOr $
trans (g cs1) q
24 | (*>) : Tok b1 e a -> Tok b2 e b -> Tok (b1 || b2) e b
26 | let Succ _ cs1 @{q} := f cs | Fail x y z => Fail x y z
27 | in swapOr $
trans (g cs1) q
30 | (<*) : Tok b1 e a -> Tok b2 e b -> Tok (b1 || b2) e a
32 | let Succ v cs1 @{q1} := f cs | Fail x y z => Fail x y z
33 | Succ _ cs2 @{q2} := g cs1 | Fail x y z => Fail (weaken $
trans x q1) y z
34 | in Succ v cs2 @{swapOr $
trans q2 q1}
37 | (<*>) : Tok b1 e (a -> b) -> Tok b2 e a -> Tok (b1 || b2) e b
39 | let Succ fun cs1 @{q} := t1 cs | Fail x y z => Fail x y z
40 | Succ val cs2 @{r} := t2 cs1 | Fail r y z => Fail (weaken $
trans r q) y z
41 | in Succ (fun val) cs2 @{swapOr $
trans r q}
46 | pure : a -> AutoTok e a
47 | pure v cs = Succ v cs
50 | (<*>) : AutoTok e (a -> b) -> AutoTok e a -> AutoTok e b
52 | let Succ fun cs1 := t1 cs | Fail x y z => Fail x y z
53 | Succ val cs2 := t2 cs1 | Fail x y z => Fail x y z
54 | in Succ (fun val) cs2
57 | (<*) : AutoTok e a -> AutoTok e b -> AutoTok e a
59 | let Succ val cs1 := t1 cs | Fail x y z => Fail x y z
60 | Succ _ cs2 := t2 cs1 | Fail x y z => Fail x y z
64 | (>>=) : AutoTok e a -> (a -> AutoTok e b) -> AutoTok e b
66 | let Succ x cs1 := f cs | Fail x y z => Fail x y z
70 | (>>) : AutoTok e () -> AutoTok e a -> AutoTok e a
72 | let Succ _ cs1 := f cs | Fail x y z => Fail x y z
76 | (*>) : AutoTok e a -> AutoTok e b -> AutoTok e b
78 | let Succ _ cs1 := f cs | Fail x y z => Fail x y z