Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.74 KB | None | 0 0
  1. #!/usr/bin/env stack
  2. -- stack --resolver=lts-12.6 script
  3.  
  4. module Main (main) where
  5.  
  6. data Expr =
  7. Val Int
  8. | Add Expr Expr
  9. | Sub Expr Expr
  10. | Mul Expr Expr
  11. | Div Expr Expr
  12.  
  13. eval :: Expr -> Maybe Int
  14. eval (Val x) = pure x
  15. eval (Add ex ey) = (+) <$> eval ex <*> eval ey
  16. eval (Sub ex ey) = (-) <$> eval ex <*> eval ey
  17. eval (Mul ex ey) = (*) <$> eval ex <*> eval ey
  18. eval (Div ex ey) = do
  19. y <- eval ey
  20. if y == 0
  21. then Nothing
  22. else do
  23. x <- eval ex
  24. pure (x `div` y)
  25.  
  26. main :: IO ()
  27. main = do
  28. -- Divide by 2: displays "Just 7"
  29. print $ eval (Div (Mul (Val 2) (Add (Val 3) (Val 4))) (Val 2))
  30.  
  31. -- Divide by 0: displays "Nothing"
  32. print $ eval (Div (Mul (Val 2) (Add (Val 3) (Val 4))) (Val 0))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement