2018-11-13 19:12
Page 1

Modelling & Datatypes

Page 2

Modelling Data

Page 3

Modelling Playing Cards

Page 4

Live Demo

Page 5

Showing Values

Page 6

The colours of cards

Page 7

Combining similar cases

Page 8

Alternative notation for case analysis

Page 9

Incomplete patterns

Page 10
Incomplete patterns

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

Page 11

The Ranks of Cards

Page 12

Rank Beats Rank

Page 13
Rank Beats Rank
rankBeats :: Rank -> Rank -> Bool
rankBeats _ Ace = False    -- nothing beats an Ace
Page 14
Rank Beats Rank
Page 15
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 16
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 17

Examples

rankBeats Jack (Numeric 7) True rankBeats (Numeric 10) Queen False

Page 18

Alternative solution

Page 19

Alternative Rank type

Page 20

Modelling a Card

Page 21

A useful shortcut

Page 22

When does one card beat another card?

Page 23

Alternative implementations of cardBeats

Page 24

Modelling a Hand of Cards 1

Page 25

Modelling a Hand of Cards

Break it down into two cases

Page 26

When can a hand beat a card?

Page 27

Which card to play?

Page 28
Which card to play?
Page 29

Recap