-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchapter03.hs
83 lines (60 loc) · 2.49 KB
/
chapter03.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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
-- ghc chapter03.hs
-- ./chapter03.exe
import System.IO
main = do
putStrLn "Chapter 03 - Start!"
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
putStrLn "Tuples in (). add (3, 4)"
let add :: (Int, Int) -> Int
add (x, y) = x + y
print (add (3, 4))
putStrLn "Can return result of list comprehension"
let zeroToN :: Int -> [Int]
zeroToN n = [0..n]
print (zeroToN 5)
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
putStrLn "Currying..."
let add' :: Int -> (Int -> Int)
add' x y = x+y
print (add' 1 2)
let mult' :: Int -> (Int -> ((Int -> Int)))
mult' x y z = x * y * z
print (mult' 1 2 3)
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
putStrLn "Polymorphism"
let reverse' :: [a] -> [a] -- 'type' should be lower-case single letter
reverse' [] = []
reverse' (x:xs) = (reverse' xs) ++ [x]
print (reverse' [1..10])
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
putStrLn "Equality"
print (True == True)
print (True /= True)
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
putStrLn "Show for converting vars to strings"
print (show False)
print (show 1)
print (show 3.1415)
print (show [1..10])
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
putStrLn "Read for converting strings to vars"
print (read "False" :: Bool)
print (read "1" :: Int)
print (read "3.1415" :: Float)
print (read "[1, 2, 3]" :: [Int])
print (read "(1, 2.3, False)" :: (Int, Float, Bool))
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
putStrLn "Division and modulus"
print (div 11 2)
print (11 `div` 2)
print (mod 11 2)
print (11 `mod` 2)
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
putStrLn "Exercise 1"
-- ['a', 'b', 'c'] :: [Char]
-- ('a', 'b', 'c') :: (Char, Char, Char)
-- [(False, '0'), (True, '1')] :: [(Bool, Char)]
-- ([False, True], ['0', '1']) :: ([Bool], [Char])
-- [tail, init, reverse] :: [[a] -> [a]]
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
putStrLn "Chapter 03 - Compete!"