类型安全的printf

时间:2013-01-05 21:21:52

标签: string haskell types

标准库提供printf函数,该函数可以成为varadic。然而,它没有做的是编译时检查参数类型是否与格式字符串匹配。这需要依赖类型,听起来真的很难实现! (你必须使用类型签名解析整个格式字符串...哎呀!)

但是经过反思,现在我想知道......我们可以用模板Haskell做到这一点吗?事实上,有没有人为此写过一个库?

(看起来你可以很容易地写一个准引脚来读取printf格式规范并生成必要的N-arg函数......)

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:6)

如果您愿意接受“格式字符串”实际上不是字符串,那么您也可以直接在Haskell中实现类似printf的函数。

例如,在Ralf Hinze的一篇名为“Formatting: a class act”的论文中对此进行了描述。在Hackage上,我只能找到实现类似于这种方法的xformat包。

答案 2 :(得分:1)

除了Printf-TH之外,似乎printf-mauke还有一些TH作为事后补充而被抛出......还有其他例子吗?