g (BoolExpr _ True) = loadP (LDC TRUE) >>= \instr-> tell [instr]
g (BoolExpr _ False) = loadP (LDC FALSE) >>= \instr-> tell [instr]
g (Op2Expr _ e1 op e2) = g e1 >>| g e2 >>| tell [Instr (op2ins op) [] ""]
+ g (Op1Expr _ UnNegation e) = g e >>| tell [Instr "not" [] ""]
+ g (Op1Expr _ UnMinus e) = g e >>| tell [Instr "neg" [] ""]
+ g (EmptyListExpr _) = abort "Shit, empty list expr"
+ g (TupleExpr p (e1,e2)) = abort "How to deal with tuples?"
+ g (FunExpr _ k es fs) = mapM g es >>| jump "bra" k >>= \instr-> tell [instr]
op2ins :: Op2 -> String
op2ins op = case op of