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

The Ranks of Cards

Page 10

Rank Beats Rank

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

Examples

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

Page 16

Alternative solution

Page 17

Alternative Rank type

Page 18

Modelling a Card

Page 19

A useful shortcut

Page 20

When does one card beat another card?

Page 21

Alternative implementations of cardBeats

Page 22

Modelling a Hand of Cards 1

Page 23

Modelling a Hand of Cards

Break it down into two cases

Page 24

When can a hand beat a card?

Page 25

Recap