Après avoir lu votre réponse à mon commentaire, je pense que votre situation est que vous avez une structure de données, peut-être avec le type [(String,String)]
, et vous Si vous souhaitez l'utiliser pour déboguer, utilisez show
pour éviter les caractères non-ASCII,
Le problème h Bien que ce ne soit pas avec l'Unicode, vous avez besoin d'une fonction qui formatera correctement vos données pour l'affichage. Je ne pense pas que show
soit le bon choix, en partie à cause des problèmes d'échappement de certains caractères. Ce dont vous avez besoin, c'est d'une classe de type comme Show
, mais celle qui affiche les données à lire au lieu d'échapper les caractères. Autrement dit, vous avez besoin d'une imprimante jolie, qui est une bibliothèque qui fournit des fonctions pour formater les données pour l'affichage. Il y a plusieurs jolies imprimantes disponibles sur Hackage, je regarderais uulib ou wl-pprint pour commencer. Je pense que l'un ou l'autre conviendrait sans trop de travail.
Voici un exemple avec les outils uulib. La classe de type Pretty
est utilisée à la place de Show, la bibliothèque contient de nombreuses instances utiles.
import UU.PPrint
-- | Write each item to StdOut
logger :: Pretty a => a -> IO()
logger x = putDoc $ pretty x <+> line
dans l'exécution de ce ghci:
Prelude UU.PPrint> logger 'Д'
Д
Prelude UU.PPrint> logger ('Д', "other text", 54)
(Д,other text,54)
Prelude UU.PPrint>
Si vous voulez afficher un fichier au lieu de la console, vous pouvez utiliser la fonction hPutDoc
à la sortie d'une poignée. Vous pouvez également appeler renderSimple
pour produire un SimpleDoc
, puis appliquer une correspondance de modèle aux constructeurs pour traiter la sortie, mais cela pose probablement plus de problèmes.Quoi que vous fassiez, évitez show
:
Prelude UU.PPrint> show $ pretty 'Д'
"\1044"
Vous pouvez aussi écrire votre propre classe de type similaire à montrer, mais au format que vous le souhaitez. Le module Text.Printf
peut être utile si vous suivez cette route.
merci. Je vais essayer – Anton
pourriez-vous obtenir conseil comment jolie-imprimantes peuvent m'aider – Anton
J'ai ajouté un exemple qui devrait rendre cela clair. Notez que la façon habituelle d'utiliser une imprimante jolie serait de rassembler toutes vos données à la fois et de rendre le document en une fois. J'ai fait cette ligne-par-ligne parce que c'est plus utile pour le débogage; vous obtiendrez plus de sortie partielle dans votre programme se bloque ou se bloque. –