2019-09-05 21:32
Page 1

Datatypes & Modelling

Page 2

But first

Page 3

Values and types in Haskell

Page 4

Functions and types in Haskell

Page 5

Predefined functions in Haskell

Page 6

Modelling Data

Page 7

Modelling Playing Cards

Page 8

Live Demo

Page 9

Showing Values

Page 10

The colours of cards

Page 11

Combining similar cases

Page 12

Incomplete patterns

Page 13
Incomplete patterns

There is a warning you can turn on to detect this:

Page 14

The Ranks of Cards

Page 15

Rank Beats Rank

Page 16
Rank Beats Rank
rankBeats :: Rank -> Rank -> Bool
rankBeats _ Ace = False    -- nothing beats an Ace
Page 17
Rank Beats Rank
Page 18
Rank Beats Rank
rankBeats :: Rank -> Rank -> Bool
rankBeats _ Ace = False   -- nothing beats an Ace
rankBeats Ace _ = True    -- an Ace beats everything else
rankBeats _ King = False
rankBeats King _ = True
rankBeats _ Queen = False
rankBeats Queen _ = True
rankBeats _ Jack = False
rankBeats Jack _ = True
Page 19
Rank Beats Rank
rankBeats :: Rank -> Rank -> Bool
rankBeats _ Ace = False   -- nothing beats an Ace
rankBeats Ace _ = True    -- an Ace beats everything else
rankBeats _ King = False
rankBeats King _ = True
rankBeats _ Queen = False
rankBeats Queen _ = True
rankBeats _ Jack = False
rankBeats Jack _ = True
rankBeats (Numeric m) (Numeric n) = m > n
Page 20

Examples

Page 21

Alternative solution

Page 22

Alternative Rank type

Page 23

Modelling a Card

Page 24

When does one card beat another card?

Page 25

Alternative implementations of cardBeats

Page 26

Modelling a Hand of Cards

Page 27

When can a hand beat a card?

Page 28

Larger example: which card to play?

Page 29

Which card to play?

Page 30

Summary