Hs2lib-0.5.7: Tests/Exec/Example.hs
{-# 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