Advertisement
Guest User

Untitled

a guest
Jun 26th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.56 KB | None | 0 0
  1. data Expr = Val Int
  2. | Add Expr Expr
  3. | Sub Expr Expr
  4. | Mul Expr Expr
  5. | Div Expr Expr
  6. | If BExpr Expr Expr
  7.  
  8. data SecondExpr = Lit Bool
  9. | Or SecondExpr SecondExpr
  10. | EqualTo Expr Expr
  11. | LessThan Expr Expr
  12.  
  13. eval :: SecondExpr -> Bool
  14. eval (Lit n) = n
  15. eval (Or e1 e2)
  16. | True && True = True
  17. | True && False = True
  18. | False && True = True
  19. | otherwise = False
  20. eval (EqualTo e1 e2)
  21. | (Add e1 e2) == (Add e1 e2) = True
  22. | (Sub e1 e2) == (Sub e1 e2) = True
  23. | (Mul e1 e2) == (Mul e1 e2) = True
  24. | (Div e1 e2) == (Div e1 e2) = True
  25. | otherwise = False
  26. eval (LessThan e1 e2)
  27. | (Add e1 e2) == (Add e1 e2) = True
  28. | (Sub e1 e2) == (Sub e1 e2) = True
  29. | (Mul e1 e2) == (Mul e1 e2) = True
  30. | (Div e1 e2) == (Div e1 e2) = True
  31. | otherwise = False
  32.  
  33. * No instance for (Eq Expr) arising from a use of `=='
  34. * In the expression: (Add e1 e2) == (Add e1 e2)
  35. In a stmt of a pattern guard for
  36. an equation for `eval':
  37. (Add e1 e2) == (Add e1 e2)
  38. In an equation for `eval':
  39. eval (EqualTo e1 e2)
  40. | (Add e1 e2) == (Add e1 e2) = True
  41. | (Sub e1 e2) == (Sub e1 e2) = True
  42. | (Mul e1 e2) == (Mul e1 e2) = True
  43. | (Div e1 e2) == (Div e1 e2) = True
  44. | otherwise = False
  45. |
  46. 24 | | (Add e1 e2) == (Add e1 e2) = True
  47. | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement