module Lang where

-- promenne a jejich ohodnoceni
type Variable = String
type Values = [(Variable, Integer)]

-- vyraz
data Expr = Plus Expr Expr |
            Minus Expr Expr |
	    Mul Expr Expr |
	    Div Expr Expr |
	    Mod Expr Expr |
	    Negate Expr |
	    Var Variable |
	    Num Integer |
	    Assign Variable Expr |
	    Output Expr |
	    Try Expr Expr
	    deriving (Show)

vyraz0a = Num 5 `Plus` (Num 8 `Div` Num 2)
vyraz0b = Num 5 `Plus` (Num 8 `Div` Num 0)

vyraz1 = (Num 8 `Div` Var "y") `Plus` (Var "x" `Mul` Num 2)
env1a = [("x",3), ("y",2)]
env1b = [("y",2)]
env1c = [("x",3), ("y",0)]

env2a = [("y",2)]
env2b = [("x",0),("y",2)]
env2c = [("x",-1),("y",2)]
vyraz2 = ("x" `Assign` (Var "x" `Plus` Num 1)) `Plus` (Var "y" `Div` Var "x") `Plus` ("x" `Assign` Num 10)
vyraz3 = Output ("x" `Assign` (Var "x" `Plus` Num 1)) `Plus` Output (Var "y" `Div` Var "x") `Plus` Output ("x" `Assign` Num 10)
vyraz4 = (Output ("x" `Assign` (Var "x" `Plus` Num 1)) `Plus` Output (Var "y" `Div` Var "x") `Plus` Output ("x" `Assign` Num 10)) `Try` Var "x"
