-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMain.hs
34 lines (27 loc) · 1.4 KB
/
Main.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
-- option 1 (https://github.com/PiotrJustyna/haskell-anywhere):
-- ./ghci.bat C:\Users\piotr_justyna\Documents\github\programming-in-haskell\part1_chapter8_exercise1
-- option 2 (stack):
-- stack ghci
-- option 3 (ghci):
-- ghci
--
-- :load Main
main = do
putStrLn "add Zero (Successor (Successor Zero))" -- 0 + 2
putStrLn . show $ add Zero (Successor (Successor Zero))
putStrLn "multiply Zero Zero" -- 0 * 0
putStrLn . show $ multiply Zero Zero
putStrLn "multiply Zero (Successor Zero)" -- 0 * 1
putStrLn . show $ multiply Zero (Successor Zero)
putStrLn "multiply (Successor Zero) (Successor (Successor Zero))" -- 1 * 2
putStrLn . show $ multiply (Successor Zero) (Successor (Successor Zero))
putStrLn "multiply (Successor (Successor Zero)) (Successor (Successor (Successor Zero)))" -- 2 * 3
putStrLn . show $ multiply (Successor (Successor Zero)) (Successor (Successor (Successor Zero)))
data Nat = Zero | Successor Nat deriving Show
add :: Nat -> Nat -> Nat
add Zero x = x
add (Successor x) y = Successor (add x y)
multiply :: Nat -> Nat -> Nat
multiply Zero y = Zero
multiply (Successor Zero) y = y
multiply (Successor x) y = multiply x (add y y)