Chaque fois qu'une valeur est affichée dans GHCi, celui-ci utilise l'attribut Show
de cet objet pour le convertir en texte lisible par l'homme en appliquant la méthode show
puis d'imprimer le résultat de la fonction String
. Dans votre cas, ce qui se passe est :
- Vous avez défini le
Show
exemple de V
pour être une constante "\n"
ou une nouvelle ligne. Ainsi, lorsque GHCi essaie d'afficher une valeur de type V
il produit une nouvelle ligne.
- En revanche, le
Show
exemple de String
est défini de telle sorte que pour toute chaîne de caractères s
, show s
produira la représentation Haskell de s
. Par exemple, show "\n"
donnera un résultat de "\"\\n\"
(c'est-à-dire guillemets, barre oblique inversée, n
entre guillemets). (Essayez d'exécuter show "myString"
dans GHCi et voir le résultat pour différentes chaînes de caractères pour avoir une idée de comment cela fonctionne). Ainsi, lorsque GHCi affiche un String
il prend la chaîne de caractères (une nouvelle ligne, dans votre cas), la convertit en un format lisible par l'homme avec des caractères d'échappement à l'aide de la fonction show
et affiche ensuite cette nouvelle chaîne.
Pourquoi est-ce que show
mis en œuvre de cette manière alambiquée pour les chaînes de caractères ? Je ne suis pas tout à fait sûr, mais une possibilité est la désambiguïsation : show 1
es "1"
mais show "1"
es "\"1\""
. Lorsqu'il est imprimé dans la console, le premier est clairement un nombre, tandis que le second est clairement une chaîne.