X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=parse.icl;h=766f1ce92b6d072bcb2fa5e0e2045cb09eb62c5e;hb=483bcde4dbb75d1901cffad6cc2c45307b7e90a2;hp=ab575b64db2c00781b9ad6ef339695e9731b36f0;hpb=e34b5f088ff9a86da61afbbe91c2c88f895673c7;p=cc1516.git diff --git a/parse.icl b/parse.icl index ab575b6..766f1ce 100644 --- a/parse.icl +++ b/parse.icl @@ -75,7 +75,9 @@ parseFunType :: Parser Token Type parseFunType = satTok DoubleColonToken *> parseFT where parseFT :: Parser Token Type - parseFT = ((->>) <$> parseType <* satTok ArrowToken <*> parseFT) <|> parseType + parseFT = (liftM2 (->>) + ((parseBBraces parseFT <|> parseType) <* satTok ArrowToken) + parseFT) <|> parseType parseVarDecl :: Parser Token VarDecl parseVarDecl = liftM4 VarDecl @@ -144,10 +146,10 @@ parseVarDef = liftM2 VarDef parseIdent parseFieldSelectors parseFieldSelectors :: Parser Token [FieldSelector] parseFieldSelectors = many (satTok DotToken *> ( - (parseIdent >>= (\i.if (i == "hd") (pure FieldHd) empty)) <|> - (parseIdent >>= \i.if (i == "tl") (pure FieldTl) empty) <|> - (parseIdent >>= \i.if (i == "fst") (pure FieldFst) empty) <|> - (parseIdent >>= \i.if (i == "snd") (pure FieldSnd) empty))) + (parseIdent >>= \i.if (i == "hd") (pure FieldHd) empty) <|> + (parseIdent >>= \i.if (i == "tl") (pure FieldTl) empty) <|> + (parseIdent >>= \i.if (i == "fst") (pure FieldFst) empty) <|> + (parseIdent >>= \i.if (i == "snd") (pure FieldSnd) empty))) parseOp1 :: Parser Token Op1 parseOp1 = trans1 DashToken UnMinus <|> trans1 ExclamationToken UnNegation @@ -163,7 +165,7 @@ parseBSqBraces p = satTok SquareOpenToken *> p <* satTok SquareCloseToken parseTuple :: (Parser Token a) -> Parser Token (a, a) parseTuple p = satTok BraceOpenToken *> - (liftM2 (\a->(\b->(a,b))) (p <* satTok CommaToken) p) + (liftM2 tuple (p <* satTok CommaToken) p) <* satTok BraceCloseToken trans :: TokenValue (TokenValue -> a) -> Parser Token (Pos, a)