instance toString Token where toString t = printToString t
-lex :: [Char] -> Either [String] [Token]
+lex :: ![Char] -> Either [String] [Token]
lex [] = pure []
lex ['//\n':ts] = lex ts
lex ['//',t:ts] = lex ['/','/':ts]
pChainr :: (Parser (a a -> a)) (Parser a) -> Parser a
pChainr op p = flip ($) <$> p <*> (flip <$> op <*> pChainr op p) <|> p
-parse :: [Token] -> Either [String] [Either TypeDef Function]
+parse :: ![Token] -> Either [String] [Either TypeDef Function]
parse ts = case runParser (many (Right <$> pFunction <|> Left <$> pTypeDef) <* pEof) ts [] of
(Left e, _, _) = Left e
(Right a, _, r) = sequence [reparse r a\\a<-a]