import Data.Func
from Data.List import intercalate, replicate, instance Functor []
from Text import class Text(concat), instance Text String
+import GenPrint
import yard
import lex
trans1 :: TokenValue a -> Parser Token a
trans1 t r = trans2 t $ const r
+derive gPrint TokenValue
derive gEq TokenValue
satTok :: TokenValue -> Parser Token Token
-satTok t = satisfy $ eq t
+satTok t = top >>= \tok=:(pos, tv) -> if (eq t tok) (return tok) (fail <?> (printToString t, pos))
where
eq (IdentToken _) (_, IdentToken _) = True
eq (NumberToken _) (_, NumberToken _) = True
parseSepList :: TokenValue (Parser Token a) -> Parser Token [a]
parseSepList sep p =
- (some (p <* satTok sep) >>= \es->p >>= \e.pure $ reverse [e:es]) <|>
+ (liftM2 (\es->(\e->reverse [e:es])) (some (p <* satTok sep)) p) <|>
(liftM pure p) <|> pure empty
parseIdent :: Parser Token String
print (FunDecl i as t vs ss) =
["\n", i, " (":printersperse "," as] ++
[") :: ":print t] ++
- ["{":printersperse "\n\t" vs] ++
- ["\n":printStatements ss 1] ++ ["}"]
+ ["{\n\t":printersperse "\n\t" vs] ++
+ ["\n":printStatements ss 1] ++ ["}\n"]
printStatements :: [Stmt] Int -> [String]
printStatements [] i = []