show
è la funzione che è definita sulle funzioni che sono membri delle Show
typeclass (se non si sa che cosa un typeclass è, è un po 'come un'interfaccia OOP).
Per impostazione predefinita, le funzioni non sono membri della classe di tipi, quindi non possiamo stamparle.
Potremmo fare un membro del typeclass con
instance Show (a -> b) where
show f = "Unicorns!!"
ma qui ci rendiamo conto perché non è implementata per impostazione predefinita. Non c'è una rappresentazione semplice e ovvia delle funzioni e haskell non vuole indovinare, e quindi nessuna istanza.
L'unica istanza "consentita" sarebbe quella che stampa effettivamente la funzione, ma ciò richiederebbe un cambio di lingua effettivo, cioè sarebbe cablato nel compilatore, il che non vale la pena per i pochi casi in cui potrebbe essere utile
ulteriormente più è un cambiamento compilatore non banale, Haskell è stato compilato il che significa che le differenze tra qualcosa come f = g
e
f = g
sono interamente perdute su di esso. Ma lo vorresti sicuramente nella rappresentazione della tua funzione. Per questo motivo, dovresti trascinare questa stringa attraverso il programma. Questo non è sicuramente quello che vuoi in un binario.
Se davvero vuoi stampare unicorni !! comunque, sentiti libero.
Quale 'stringa 'ti aspetteresti di produrre per quella funzione? –