标准库提供printf
函数,该函数可以成为varadic。然而,它没有做的是编译时检查参数类型是否与格式字符串匹配。这需要依赖类型,听起来真的很难实现! (你必须使用类型签名解析整个格式字符串...哎呀!)
但是经过反思,现在我想知道......我们可以用模板Haskell做到这一点吗?事实上,有没有人为此写过一个库?
(看起来你可以很容易地写一个准引脚来读取printf格式规范并生成必要的N-arg函数......)
答案 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作为事后补充而被抛出......还有其他例子吗?