datatype suit = Clubs | Hearts | Diamonds | Spades; fun redSuit(Hearts) = true | redSuit(Diamonds) = true | redSuit(Clubs) = false | redSuit(Spades) = false; datatype rank = Ace | Two | Three | Four | Five |Six | Seven |Eight | Nine | Ten | Jack | Queen | King; datatype rank = Ace | Jack | Queen | King | Numbered of int; datatype card = Card of rank * suit; fun suitName Clubs = "Clubs" | suitName Hearts = "Hearts" | suitName Diamonds = "Diamonds" | suitName Spades = "Spades"; fun rankName Ace = "Ace" | rankName King = "King" | rankName Jack = "Jack" | rankName Queen = "Queen" | rankName (Numbered n) = Int.toString(n); fun cardName (Card (rank, suit)) = (rankName rank) ^ " of " ^ (suitName suit); fun red (Card (_, suit)) = redSuit suit;