0d7907a80ed3812ded705e724d647bf0395e642d
[ghc-hetmet.git] / ghc / compiler / parser / ParserCoreUtils.hs
1 module ParserCoreUtils where
2
3 data ParseResult a = OkP a | FailP String
4 type P a = String -> Int -> ParseResult a
5
6 thenP :: P a -> (a -> P b) -> P b
7 m `thenP`  k = \ s l -> 
8   case m s l of 
9     OkP a -> k a s l
10     FailP s -> FailP s
11
12 returnP :: a -> P a
13 returnP m _ _ = OkP m
14
15 failP :: String -> P a
16 failP s s' _ = FailP (s ++ ":" ++ s')
17
18 data Token =
19    TKmodule
20  | TKimport
21  | TKdata
22  | TKnewtype
23  | TKforall
24  | TKrec
25  | TKlet
26  | TKin
27  | TKcase
28  | TKof
29  | TKcoerce
30  | TKnote
31  | TKexternal
32  | TKwild
33  | TKoparen
34  | TKcparen
35  | TKobrace
36  | TKcbrace
37  | TKhash
38  | TKeq
39  | TKcoloncolon
40  | TKstar
41  | TKrarrow
42  | TKlambda
43  | TKat
44  | TKdot
45  | TKquestion
46  | TKsemicolon
47  | TKname String
48  | TKcname String
49  | TKinteger Integer
50  | TKrational Rational
51  | TKstring String
52  | TKchar Char
53  | TKEOF
54