2010-03-18 5 views

Répondre

30

Il y a un module printf dans GHC.

import Text.Printf 
str :: String 
str = printf "%d %d" 10 20 

mais il est probablement plus simple à faire juste

str = show 10 ++ " " ++ show 20 
+0

Cela ne fonctionne pas J'ai ERROR filename.hs: 3: Ne peut pas justifier les contraintes en liaison explicitement typée ». J'utilise WinHugs. –

+13

Vous devriez passer à GHC. Les câlins ne sont pas maintenus, sont lents et ne prennent en charge que très peu de paquets sur Hackage. Il ne fait pas non plus partie de la spécification de la plate-forme Haskell. –

+0

'Text.Printf.printf' renvoie une action IO (' IO() ') lorsqu'il est complètement appliqué, pas un' String'. – SwiftsNamesake

22

Vous pouvez utiliser la fonction format fournie par le paquet text-format-simple:

import Text.Format 
format "{0} {1}" [show 10, show 20] 

Cette fonction a la signature:

format :: String -> [String] -> String 

Donc, tout ce que vous avez besoin est de fournir vos paramètres sous forme de chaînes.
Un autre exemple:

format "Some {0} believes that 1 + 1 = {1}." ["people",show 10] 
+0

Wow! Mise en forme de style C# en haskell. Excellent travail Dmitry! et bienvenue sur stackoverflow! –

+4

Je recommanderais/ne pas/utiliser ce paquet, car il est très limité dans ce qu'il peut faire. Je travaille sur un paquet nommé [text-format] (http://hackage.haskell.org/package/text-format) qui est généralement plus performant, et déjà utilisable à cette fin. –

+0

Dmitry, tous les paquets que vous avez listés sauf pour la double conversion sont inclus dans la plate-forme Haskell. La grande majorité des utilisateurs n'auront pas à installer autant. Votre argument est toujours valide. –

6

Mettre réponse ici au cas où quelqu'un recherche de mise en forme des bibliothèques dans Haskell sur StackOverflow. Il existe maintenant une bibliothèque de formatage sécurisée et rapide, appelée fmt. Avec cela, vous pouvez écrire du code comme ceci:

> "There are "+|n|+" million bicycles in "+|city|+"."