13

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

但仔细想想,现在我想知道......我们可以用 Template Haskell 做到这一点吗?事实上,有没有人为此编写了一个库?

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

4

3 回答 3

8

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

于 2013-01-05T21:33:36.747 回答
6

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

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

于 2013-01-05T22:41:41.920 回答
1

除此之外Printf-TH,似乎也printf-mauke有一些 TH 作为事后的想法......还有其他例子吗?

于 2013-01-05T21:44:16.380 回答