:: Upd = Upd :: Expr = Expr :: Stmt = Stmt :: MTask = MTask Int // String class arith v where lit :: t -> v t Expr | ... (+.) infixl 6 :: (v t p) (v t q) -> v t Expr | ... ... class boolExpr v where (&.) infixr 3 :: (v Bool p) (v Bool q) -> v Bool Expr | ... ... (==.) infix 4 :: (v a p) (v a q) -> v Bool Expr | ... ...