2010-03-18 12 views

Antwort

30

Es gibt eine Printf-Modul in GHC.

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

jedoch ist es wahrscheinlich einfacher zu tun, nur

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

Es funktioniert nicht, ich habe 'ERROR filename.hs: 3: Kann Einschränkungen in explizit typisierte Bindung nicht rechtfertigen '. Ich benutze WinHugs. –

+13

Sie sollten zu GHC wechseln. Hugs wird nicht gepflegt, ist langsam und unterstützt nur sehr wenige der Pakete in Hackage. Es ist auch nicht Teil der Haskell-Plattform-Spezifikation. –

+0

'Text.Printf.printf' gibt eine IO-Aktion (' IO() ') zurück, wenn sie vollständig angewendet wird, keine' Zeichenkette'. – SwiftsNamesake

22

Sie könnten die von der text-format-simple Paket bereitgestellt format Funktion:

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

dieser Funktion wird die Signatur hat:

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

alles, was Sie brauchen, ist also Ihre Parameter als Strings liefern.
Ein weiteres Beispiel:

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

Wow! C# Stil Formatierung in Haskell. Gute Arbeit Dmitry! und willkommen bei stackoverflow! –

+4

Ich empfehle/nicht/dieses Paket zu verwenden, da es sehr eingeschränkt ist, was es tun kann. Ich arbeite an einem Paket mit dem Namen [text-format] (http://hackage.haskell.org/package/text-format), das in der Regel leistungsfähiger und für diesen Zweck bereits recht brauchbar ist. –

+0

Dmitry, alle Pakete, die Sie aufgelistet haben, außer Doppelkonvertierung, sind in der Haskell Platform enthalten. Die große Mehrheit der Benutzer wird nicht so viel installieren müssen. Ihr Argument ist trotzdem gültig. –

6

Putting für Antwort hier, wenn jemand die Suche Bibliotheken Formatierung in Haskell auf Stackoverflow. Es gibt jetzt eine typsichere und schnelle Formatierungsbibliothek namens fmt. Mit ihm können Sie Code wie folgt schreiben:

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