on master help sign in
Removed textbook-code comments, beautified headings
commit02c94c324629825333fe779e4e871ba254db8d13 authorMelvar Chen <Melvar.Chen@googlemail.com> dateSun 7 Jul 2013, 17:22 (13 years ago) parent942f55e
1 file changed+16−24
contribs/lib/SimpleParser/SimpleParser.idr+16−24
contribs/lib/SimpleParser/SimpleParser.idr+16−24
@@ -14,10 +14,9 @@ import Builtins
1414%access public
1515
1616
17−{-
18−The monad of parsers
19−--------------------
20−-}
17+--------------------------------------------------------------------------------
18+-- The monad of parsers
19+--------------------------------------------------------------------------------
2120
2221data Parser a = P (String -> Either String (a, String))
2322
@@ -25,23 +24,17 @@ parse : Parser a -> String -> Either String (a, String)
2524parse (P p) inp = p inp
2625
2726instance Functor Parser where
28− -- fmap : (a -> b) -> f a -> f b
29− -- fmap : (a -> b) -> Parser a -> Parser b
30− -- Given a function (a -> b), and a parser a, make a parser b
3127 fmap f p = P (\inp => case parse p inp of
3228 Left err => Left err
33− -- Apply f to the v that we got from parsing
3429 Right (v, rest) => Right ((f v), rest))
3530
3631instance Applicative Parser where
3732 pure v = P (\inp => Right (v, inp))
38− -- Parse to get the function, then parse to get the first argument
3933 a <$> b = P (\inp => do (f, rest) <- parse a inp
4034 (x, rest') <- parse b rest
4135 pure ((f x), rest'))
4236
4337instance Monad Parser where
44− -- m a -> (a -> m b) -> m b
4538 p >>= f = P (\inp => case parse p inp of
4639 Left err => Left err
4740 Right (v,rest) => parse (f v) rest)
@@ -53,10 +46,9 @@ instance Alternative Parser where
5346 Right (v,out) => Right (v,out))
5447
5548
56−{-
57−Basic parsers
58−-------------
59−-}
49+--------------------------------------------------------------------------------
50+-- Basic parsers
51+--------------------------------------------------------------------------------
6052
6153failure : String -> Parser a
6254failure msg = P (\inp => Left msg)
@@ -67,9 +59,9 @@ item = P (\inp => case unpack inp of
6759 (x::xs) => Right (x, pack xs))
6860
6961
70−--{-
71−--Derived primitives
72−---}
62+--------------------------------------------------------------------------------
63+-- Derived primitives
64+--------------------------------------------------------------------------------
7365
7466sat : (Char -> Bool) -> Parser Char
7567sat p = item >>= (\x => if p x then pure x else failure "failed")
@@ -132,9 +124,11 @@ int = neg <|> nat
132124space : Parser ()
133125space = do many (sat isSpace)
134126 pure ()
135−--{-
136−--Ignoring spacing
137−---}
127+
128+
129+--------------------------------------------------------------------------------
130+-- Ignoring spacing
131+--------------------------------------------------------------------------------
138132
139133token : Parser a -> Parser a
140134token p = do space
@@ -157,12 +151,10 @@ symbol xs = token (string xs)
157151strToken : Parser String
158152strToken = fmap pack (token (many1 alphanum))
159153
160−--apply : Parser a -> String -> List (a,String)
161−--apply p = parse (space >>= (\_ => p))
162154
163−--{-
155+--------------------------------------------------------------------------------
164156-- Expressions
165−---}
157+--------------------------------------------------------------------------------
166158
167159expr : Parser Int
168160factor : Parser Int