11 // (+.) infixl 6 :: (v c a) (v c a) -> v c a | + a
13 :: BM x y = { to :: x -> y, fro :: y -> x }
17 :: ToString a = E.e: ToString (BM a e) & toString e
19 :: Printer a = P a ([String] -> [String])
20 :: PrintConstraints a = E.e: PC (BM a e) & toString e
22 print :: (Printer (PrintConstraints a)) -> [String]
25 instance expr Printer PrintConstraints
27 lit a = P (PC bm) \c->[toString (bm.to a):c]
28 //instance plus Printer PrintConstraints
30 // (+.) (P l) (P r) = P \c->["(":l ["+":r [")":c]]]
32 //:: Eval c a = E a | EBlurp (c a)
33 //:: EvalConstraints a = EC a
34 //eval :: (Eval EvalConstraints a) -> a
37 //instance expr Eval EvalConstraints
40 //instance plus Eval PrintConstraints
42 // (+.) (E l) (E r) = E (l + r)