Seguimos con Type class.
Algunos valores se pueden "mostrar", pero no todos.
Por ejemplo, en general es imposible mostrar una función.
Por lo tanto, debemos usar type class
show::Show a → a→String
Definición de su propia instancia de Show
data Foo = Bar | Baz
Podríamos querer nuestra propia representación de cadena :
instance Show Foo where
show Bar = "it is a bar"
show Baz = "this is a baz"
Recordemos que cuando ingresa una expresión exp en ghci, imprime showexp. Entonces podemos probar nuestra extraña declaración de instancia:
*Main> Bar
it is a bar
*Main> Baz
this is a baz
deriving nos permite indicar que "implementa" Show o otro data type :
data Foo2 = Bar2 | Baz2
deriving (Read, Show)
Haskell definirá automáticamente una instancia de show para Foo2, usando la definición obvia:
*Main> Bar2
Bar2
*Main> Baz2
Baz2