[Haskell-cafe] Creating an instance of the Show Typeclass for a datatype

Tom Ellis tom-lists-haskell-cafe-2013 at jaguarpaw.co.uk
Thu Dec 3 22:23:10 UTC 2015


On Thu, Dec 03, 2015 at 10:16:07PM +0000, Murilo Winter wrote:
> As part of my exercise, I have to create an instance of the show typeclass
> for a given data type defined as:
> 
>    1. *type *stat *= (*String*, Int)*

That's not a new datatype, that's a type synonym.

> *If* it was a data type, like:
> 
>    1. data TrafficLight = Red | Yellow | Green
> 
> 
> It would be as simple as doing:
> 
>    1. instance Show TrafficLight where
>    2.     show Red = "Red light"
>    3.     show Yellow = "Yellow light"
>    4.     show Green = "Green light"
> 
> 
> However, I do not know how to declare the instance for a type, and then how
> to access its elements (String and Int).
> 
> This is what I have so far, which does not work:
> 
>    1. instance Show Stat where
>    2.     show stat(a,b) = a
> 
> instance Show Stat where
>   show stat(a b) = b

You probably want something like

    data Stat = Stat String Int

    instance Show Stat where
        show (Stat s _) = s


By why not just use

    data Stat = Stat String Int deriving Show

instead?

Tom


More information about the Haskell-Cafe mailing list