2013-01-05 54 views
13

标准库提供一个printf功能,其管理是varadic。然而,它没有做的是编译时检查参数类型是否匹配格式字符串。这将需要依赖类型,而且听起来好像也很难实现! (你必须解析使用类型签名全格式字符串......呸!)类型安全的printf

但细想起来,现在我想知道......我们能做到这一点使用模板哈斯克尔?事实上,有没有人为此写过一个图书馆?

(它看起来像你可以很容易写一个准加引号,读取printf格式规范,并生成必要的N- ARG功能...)

回答

8

是的,这是可能的。是的,它已经完成了。你应该真的检查这种问题hackage:http://hackage.haskell.org/package/Printf-TH

+1

有趣。我正在看Hackage,而且我没有看到......哦,等等,它不在Text下,它在Utils下。哇,看看它所有的文件... :-( – MathematicalOrchid

+0

@MathematicalOrchid我刚刚查看了源代码,好像这个文件没有使用haddock标记记录。奇怪的是,没有人在维护这个包。 – Tarrasch

1

除了Printf-TH,似乎printf-mauke也有一些TH作为事后的投入......任何其他的例子?

6

如果你愿意接受的“格式字符串”是不是一个真正的字符串,那么你可以直接在Haskell实现类printf函数了。

这已被描述于,例如,在由拉尔夫Hinze纸,所谓的“Formatting: a class act”。在Hackage上,我只能找到xformat包实现类似于这种方法。