A muchos probablemente les haya sucedido encontrarse con el error No instance for Show
.
Esto, contrario a lo que muchos creen, no significa que nos quedamos sin show por falta de instancias.
Lo que significa es, en criollo, “ARRRGH, no sé mostrar esto en la consola”
Sólo que lo dice aproximadamente así:
<interactive>:2:1:
No instance for (Show (a0 -> Bool))
(maybe you haven't applied enough arguments to a function?)
arising from a use of ‘print’
In the first argument of ‘print’, namely ‘it’
In a stmt of an interactive GHCi command: print it
La mayoría de los datos son “mostrables”. Si yo quiero mostrar un “3”, la consola lo sabe mostrar:
Main> 3
3
Pero no puedo mostrar una función:
Main> even
<interactive>:2:1:
No instance for (Show (a0 -> Bool))
(...)
Arriba de todo en el archivo .hs escribir:
import Text.Show.Functions
Esto hace que las funciones sean mostrables:
Main> even
<function>
En realidad, técnicamente lo que estamos haciendo al hacer el import de Text.Show.Functions es lo mismo que agregar esto al principio de nuestro archivo:
instance Show (a -> b) where
show f = "<una función>"
Esto hace que las funciones sean mostrables:
Main> even
<una función>
Para entender más sobre el tema, se recomienda la lectura de Definiendo nuestros Tipos
También se recomienda la lectura de Learn you a Haskell, el capítulo sobre clases de tipos