X-Git-Url: https://git.lukelau.me/?p=kaleidoscope-hs-old.git;a=blobdiff_plain;f=AST.hs;h=73523d6d4c8a37cef977d5614d355aaac13756af;hp=720413652e4343740ad6268e0a866b0576e4c4aa;hb=fd502ca628b539cffbc38c21755ebaa615b30b72;hpb=f0b1775c0a3a30e98e6eb6452e6052bd759cf81b diff --git a/AST.hs b/AST.hs index 7204136..73523d6 100644 --- a/AST.hs +++ b/AST.hs @@ -39,7 +39,8 @@ instance Read AST where return (Function name params body) instance Read Expr where - readPrec = choice [ parseNum + readPrec = choice [ parseParens + , parseNum , parseVar , parseCall , parseIf @@ -50,7 +51,9 @@ instance Read Expr where , parseBinOp "<" (Cmp LT) , parseBinOp "==" (Cmp EQ) ] - where parseNum = Num <$> readPrec + where parseParens = step $ lift $ + between (char '(') (char ')') (readS_to_P reads) + parseNum = Num <$> readPrec parseVar = Var <$> lift (munch1 isAlpha) parseCall = do func <- lift (munch1 isAlpha)