2010-03-18 73 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|+"."