Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env stack
- -- stack --resolver=lts-12.6 script
- module Main (main) where
- data Expr =
- Val Int
- | Add Expr Expr
- | Sub Expr Expr
- | Mul Expr Expr
- | Div Expr Expr
- eval :: Expr -> Maybe Int
- eval (Val x) = pure x
- eval (Add ex ey) = (+) <$> eval ex <*> eval ey
- eval (Sub ex ey) = (-) <$> eval ex <*> eval ey
- eval (Mul ex ey) = (*) <$> eval ex <*> eval ey
- eval (Div ex ey) = do
- y <- eval ey
- if y == 0
- then Nothing
- else do
- x <- eval ex
- pure (x `div` y)
- main :: IO ()
- main = do
- -- Divide by 2: displays "Just 7"
- print $ eval (Div (Mul (Val 2) (Add (Val 3) (Val 4))) (Val 2))
- -- Divide by 0: displays "Nothing"
- print $ eval (Div (Mul (Val 2) (Add (Val 3) (Val 4))) (Val 0))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement