
I'm having some trouble defining an implementation for "Read". I know I could model a card more simply as an unconstrained tuplet, but I'm trying to learn new things about haskell as I go. module Card.Card ( Suit(..) ,Card(..) ) where data Suit = Club | Spade | Diamond | Heart deriving (Eq, Ord, Show, Read, Bounded, Enum) data Card = Card { suit :: Suit , rank :: Int } deriving (Ord, Bounded, Eq) instance Show Card where show Card { suit = Club, rank = a } = show a ++ "c" show Card { suit = Spade, rank = a } = show a ++ "s" show Card { suit = Heart, rank = a } = show a ++ "h" show Card { suit = Diamond, rank = a } = show a ++ "d" instance Read Card where readsPrec (a:b) = Card{ suit=(toSuit a), rank=(read b) } where toSuit s | s=='c' = Club | s=='s' = Spade | s=='d' = Diamond | s=='h' = Heart The error is: Card/Card.hs:24:12: Couldn't match expected type `Int' against inferred type `[a]' In the pattern: a : b In the definition of `readsPrec': readsPrec (a : b) = Card {suit = (toSuit a), rank = (read b)} where toSuit s | s == 'c' = Club | s == 's' = Spade | s == 'd' = Diamond | s == 'h' = Heart In the instance declaration for `Read Card' Where am I going wrong? Thanks, Peter