Higher-order functions
> map double [1, 2, 3]
[2, 4, 6]
map f [] = []
map f (x:xs) = f x : map f xs
Slide 9
Slide 9 text
Function Types
> :t double
double :: Num a => a -> a
> :t (*)
(*) :: Num a => a -> a -> a
> :t map
map :: (a -> b) -> [a] -> [b]
Slide 10
Slide 10 text
Currying
> :t (*)
(*) :: Num a => a -> a -> a
> :t (2*)
(2*) :: Num a => a -> a
double = 2*
dblAll = map (2*)
Slide 11
Slide 11 text
Data Types
data Bool = True | False
data Maybe a = Just a | Nothing
data Either a b = Left a | Right b
data Tree a = Empty | Node a (Tree a) (Tree b
)
•
•
•
•
Slide 12
Slide 12 text
yesOrNo True = "yes"
yesOrNo False = "no"
traverse Empty = []
traverse (Node v l r)
= (traverse l) ++ v : traverse r
Slide 13
Slide 13 text
Laziness
fib c n = c : fib n (c + n)
> fib 0 1
[0, 1, 1, 2, 3, 5, 8, 13, 21 ...
> take 5 (fib 0 1)
[0, 1, 1, 2, 3]