The Text.ParserCombinators.ReadPrec/Text.ParserCominators.ReadP split
adds a bit of lifting cruft, so lets try to sweep that away.
parseVar = Var <$> lift (munch1 isAlpha)
parseBinOp s prc op = prec prc $ do
a <- step readPrec
parseVar = Var <$> lift (munch1 isAlpha)
parseBinOp s prc op = prec prc $ do
a <- step readPrec
- lift $ do
- skipSpaces
- string s
- skipSpaces
b <- readPrec
return (BinOp op a b)
parseCall = do
b <- readPrec
return (BinOp op a b)
parseCall = do
(skipSpaces >> char ',' >> skipSpaces)
return (Call func params)
parseIf = do
(skipSpaces >> char ',' >> skipSpaces)
return (Call func params)
parseIf = do
- lift $ skipSpaces >> string "if" >> skipSpaces
- lift $ skipSpaces >> string "then" >> skipSpaces
- lift $ skipSpaces >> string "else" >> skipSpaces
elseE <- readPrec
return (If cond thenE elseE)
elseE <- readPrec
return (If cond thenE elseE)
+ spaced f = lift $ skipSpaces >> f >> skipSpaces
data Prototype = Prototype String [String]
deriving Show
data Prototype = Prototype String [String]
deriving Show