J'ai du mal à essayer de formater la sortie A d'une liste de mon propre type de haskell.
Je voudrais quelque chose comme ceci: p> ^
Ce serait les données chargées de mon type de chaîne de chaîne [int]. P> Comment ferais-je cela dans HASKELLL? P> P>
3 Réponses :
En règle générale, nous utilisons des bibliothèques "jolies imprimantes" pour faire de belles sorties formatées. La norme que vous devez savoir est text.prettyprint . Compte tenu d'un type de données, vous pouvez marcher sur ce type, construire un document bien formé.
Exemple: p> test: p> Make | Model | Year
foo | avenger | 1990, 1992
bar | eagle | 1980, 1982
Si vous souhaitez que la largeur de la colonne s'adapte à l'élément le plus large, vous avez besoin d'un autre code.
Je préfère ne pas utiliser ces bibliothèques, j'aime la méthode ci-dessous, mais je ne sais pas comment utiliser un ensemble de données de test avec elle?
Vous auriez lu les données de test d'un fichier ou d'une base de données. Edit: Ah, je vois, vous regardez comment faire l'IO aussi. Recherchez d'autres questions sur ce site sur io code> +
haskell code>.
c'est dans une fonction: TestData = [(((type1 "," type2 ", [" item1 "," item12 "]," type2 "," type3 ", [" item2 "," item22 "])] Ouais Les données sont originaires de mon propre format / type ...
quelque chose comme ça? MAINTENANT, vous pouvez faire P> >>> fooToLine (Foo "Hello" "World" [1, 2, 3])
"Hello | World | 1, 2, 3"
Ahhh Ive a vu quelque chose de similaire à celui-ci aujourd'hui - comment ça marche?
Comment utilisera des données de test pour cela? Donc, vous ne donnez pas en réalité que les utilisateurs FRM TE mettent fin à la fonction de Antehr appelée TestData ??
@Ash: J'ai ajouté un exemple simple. Notez que cela suppose que vos chaînes ont de la même longueur, sinon les colonnes ne s'alignent pas. Voir la réponse de Don Stewart pour savoir comment gérer les colonnes d'alignement de différentes largeurs.
Alors, comment puis-je apporter cet appel une autre fonction pour les données de test? Ceci est l'autre fonction: TestData = [((("type1", "type2", ["item1", "item12"], "type2", "type3", ["item22"])] Comment puis-je mettre cela à là, il ne nécessite pas d'entrée de l'utilisateur?
Vous pouvez faire quelque chose comme mapm_ (poststrln. Footoline) Testdata code>, bien que vous devez soit modifier le
FOO code> S sur les tuples ou vice versa.
Voici un générateur de table généralisé. Il calcule les largeurs de colonne pour s'adapter à la ligne la plus large. Le type coldsc code> vous permet de spécifier, pour chaque colonne, l'alignement du titre, la chaîne de titre, l'alignement des données et une fonction pour formater les données.
Make | Model | Year
-----+---------+-----------------
foo | avenger | 1990, 1992
bar | eagle | 1980, 1982, 1983
C'est ma jolie imprimante préférée maintenant pour les tables. J'aime que c'est simple et composable.