2010-03-18 109 views

回答

30

有在GHC一個printf模塊。

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

但它可能是簡單的只是做

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

它不工作我得到了'ERROR filename.hs:3:不能證明顯式類型綁定約束。我正在使用WinHugs。 –

+13

您應該切換到GHC。擁抱是無人維護,緩慢的,並且支持Hackage上很少的軟件包。它不是Haskell平臺規範的一部分。 –

+0

'Text.Printf.printf'在完全應用時返回IO操作('IO()'),而不是'String'。 – SwiftsNamesake

4

這是你在找什麼?

printf "%d %d" 10 20 

請參閱Text.Printf

22

你可以使用由text-format-simple包提供的format功能:

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

此函數簽名:

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

因此,所有你需要的是提供您的參數爲字符串。
又如:

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

哇! Haskell中的C#樣式格式。偉大的工作德米特里!並歡迎來到stackoverflow! –

+4

我推薦/不使用該軟件包,因爲它的功能非常有限。我正在研究一個名爲[text-format](http://hackage.haskell.org/package/text-format)的軟件包,它通常功能更強大,並且已經非常適用於此目的。 –

+0

德米特里,您列出的所有程序包保存爲雙重轉換都包含在Haskell平臺中。絕大多數用戶不需要安裝那麼多。你的論點仍然有效。 –

6

把答案在這裏萬一有人搜索StackOverflow上在哈斯克爾格式化庫。現在有稱爲fmt的類型安全和快速格式化庫。有了它,你可以這樣寫代碼:

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