(<:>) l r = (\xs->[l:xs]) <$> r
:: Token = TTEq | TTSemiColon | TTLambda | TTDot | TTBrackOpen | TTBrackClose | TTBool Bool | TTInt Int | TTOp [Char] | TTIdent [Char]
+
derive gEq Token
-instance toString Token where toString t = printToString t
derive gPrint Token
+
+instance toString Token where toString t = printToString t
+
lex :: [Char] -> Either [String] [Token]
lex [] = pure []
lex [';':ts] = TTSemiColon <:> lex ts
(map fst $ sortBy (on (<) snd) ifxs)
$ pChainl (pure App)
$ Lambda <$ pToken TTLambda <*> pId <* pToken TTDot <*> pExpression
+ <|> Var <$ pToken TTBrackOpen <*> pOp <* pToken TTBrackClose
<|> pToken TTBrackOpen *> pExpression <* pToken TTBrackClose
- <|> Lit o Int <$> (\(TTInt i)->i) <$> pTop ? (\t->t=:(TTInt _))
+ <|> (\(TTInt i)->Lit (Int i)) <$> pTop ? (\t->t=:(TTInt _))
<|> (\(TTBool i)->Lit (Bool i)) <$> pTop ? (\t->t=:(TTBool _))
<|> Var <$> pId