La fonction montrent en Haskell ne semble pas faire ce qu'il faut:Haskell: Montrer foiré?
Prelude> let str = "stack\n\noverflow"
Prelude> putStrLn str
stack
overflow
Prelude> show str
"\"Stack\\n\\n\\noverflow\""
Prelude>
Quand je déclare fonctions, je mets normalement les signatures de type comme Afficher, qui ne traite pas correctement les nouvelles lignes . Je veux qu'il traite \n
comme des sauts de ligne, pas littéralement "\n"
. Quand je change le type à String, les fonctions fonctionnent bien. Mais je dois mettre en œuvre une fonction séparée pour les entiers, flottants, etc., etc.
Par exemple, je peux déclarer une fonction:
foo :: (Show x) => x -> IO()
foo x = do
putStrLn $ show x
... et l'appeler ainsi:
foo "stack\n\noverflow"
foo 6
foo [1..]
Comment devrais-je obtenir la fonction pour retourner ce qui est attendu? C'est à dire. quelle fonction est similaire à show
mais peut renvoyer des chaînes contenant des retours à la ligne?
Pouvez-vous nous donner un cas d'utilisation spécifique de ce? Cela faciliterait la compréhension de votre intention. – Martijn
Vous pouvez simplement ajouter une vérification pour voir si l'entrée est une chaîne, et l'imprimer. L'appariement de motifs est une chose très utile. – Rayne
"show" est juste comme "repr()" dans Python et "inspect" dans Ruby, si vous avez déjà utilisé ces langages. –