类型安全的printf

Mat*_*hid 13 string haskell types

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

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

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

Car*_*arl 8

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


kos*_*kus 6

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

例如,在Ralf Hinze的一篇名为" 格式化:集体行为 " 的论文中对此进行了描述.在Hackage上,我只能找到实现类似于这种方法的xformat包.