pCons = tuple <$> pId <*> many pType
- pType
- = TInt <$ pTop ? (\t->t=:(TTIdent ['Int']))
- <|> TBool <$ pTop ? (\t->t=:(TTIdent ['Bool']))
- <|> TVar <$> pId
- <|> pBrack pType
+ pType = TInt <$ pTop ? (\t->t=:(TTIdent ['Int']))
+ <|> TBool <$ pTop ? (\t->t=:(TTIdent ['Bool']))
+ <|> TVar <$> pId
+ <|> pBrack (pChainr ((-->) <$ pToken (TTOp ['->'])) $ pChainl (pure TApp) pType)
pId = (\(TTIdent i)->i) <$> pTop ? (\t->t=:(TTIdent _))
pOp = (\(TTOp i)->i) <$> pTop ? (\t->t=:(TTOp _))
(map fst $ sortBy (on (<) snd) ifxs)
$ pChainl (pure App)
$ Lambda <$ pToken (TTOp ['\\']) <*> pId <* pToken (TTOp ['.']) <*> pExpression
- <|> pBrack ( Tuple <$> pExpression <* pToken (TTOp [',']) <*> pExpression
- <|> Var <$> pOp
- <|> pExpression)
+ <|> pBrack (Var <$> pOp <|> pExpression)
<|> Lit o Int <$> pInt
<|> (\(TTBool i)->Lit (Bool i)) <$> pTop ? (\t->t=:(TTBool _))
<|> (\x->Var ['_':x]) <$ pToken (TTIdent ['code']) <*> pId