Slide 1

Slide 1 text

Haskell A Brief Introduction

Slide 2

Slide 2 text

Pure Functional Lists Lazy • • •

Slide 3

Slide 3 text

Built-in Types Numbers: 1, 1.234 Booleans: True, False Characters/Strings: 'a', "asdf" Lists: [1,2,3] Tuples:("jim", 25) • • • • •

Slide 4

Slide 4 text

Functions double x = 2 * x > double 5 10

Slide 5

Slide 5 text

Control max x y = if x > y then x else y max x y | x > y = x | otherwise y

Slide 6

Slide 6 text

Lists [] 1 : [2, 3] = [1, 2, 3] [1, 2] ++ [3, 4] = [1, 2, 3, 4] head [1, 2, 3] = 1 tail [1, 2, 3] = [2, 3]g • • • • •

Slide 7

Slide 7 text

Pattern Matching dblAll [] = [] dblAll (x:xs)= double x : dblAll xs

Slide 8

Slide 8 text

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]

Slide 14

Slide 14 text

Laziness > (fib 0 1) !! 900 54877108839480000051413673948383714443800