From: Luke Lau Date: Wed, 5 Jun 2019 21:12:52 +0000 (+0100) Subject: Tidy up the parsing a bit X-Git-Url: http://git.lukelau.me/?p=kaleidoscope-hs.git;a=commitdiff_plain;h=0d4ed473c520786af90ab70dac51451ea2b8b941 Tidy up the parsing a bit The Text.ParserCombinators.ReadPrec/Text.ParserCominators.ReadP split adds a bit of lifting cruft, so lets try to sweep that away. --- diff --git a/AST.hs b/AST.hs index 1e505af..ae18a52 100644 --- a/AST.hs +++ b/AST.hs @@ -30,10 +30,7 @@ instance Read Expr where parseVar = Var <$> lift (munch1 isAlpha) parseBinOp s prc op = prec prc $ do a <- step readPrec - lift $ do - skipSpaces - string s - skipSpaces + spaced $ string s b <- readPrec return (BinOp op a b) parseCall = do @@ -43,13 +40,14 @@ instance Read Expr where (skipSpaces >> char ',' >> skipSpaces) return (Call func params) parseIf = do - lift $ skipSpaces >> string "if" >> skipSpaces + spaced $ string "if" cond <- readPrec - lift $ skipSpaces >> string "then" >> skipSpaces + spaced $ string "then" thenE <- readPrec - lift $ skipSpaces >> string "else" >> skipSpaces + spaced $ string "else" elseE <- readPrec return (If cond thenE elseE) + spaced f = lift $ skipSpaces >> f >> skipSpaces data Prototype = Prototype String [String] deriving Show