{-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE DeriveDataTypeable #-} module Tests.Exec.Example where import Tests.Exec.Default data Expr = Mul Expr Expr | Div Expr Expr | Sub Expr Expr | Add Expr Expr | Parens Expr | Val Int | Var String | Let String Expr Expr -- @@ Export printExpr :: Expr -> String printExpr (Mul e1 e2) = printExpr e1 ++ " * " ++ printExpr e2 printExpr (Div e1 e2) = printExpr e1 ++ " / " ++ printExpr e2 printExpr (Sub e1 e2) = printExpr e1 ++ " - " ++ printExpr e2 printExpr (Add e1 e2) = printExpr e1 ++ " + " ++ printExpr e2 printExpr (Parens e) = "(" ++ printExpr e ++ ")" printExpr (Val i) = show i printExpr (Var str) = str printExpr (Let v e1 e2) = "Let " ++ v ++ " = " ++ printExpr e1 ++ " in " ++ printExpr e2 deriving instance Data Expr deriving instance Typeable Expr deriving instance Eq Expr