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
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
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)