类型安全的 printf
Posted
技术标签:
【中文标题】类型安全的 printf【英文标题】:Type-safe printf 【发布时间】:2012-12-20 00:51:20 【问题描述】:标准库提供了一个printf
函数,它设法成为可变参数。然而,它没有做的是编译时检查参数类型是否与格式字符串匹配。这将需要依赖类型,而且听起来也很难实现! (您必须使用类型签名来解析整个格式字符串……哎呀!)
但仔细想想,现在我想知道......我们可以用 Template Haskell 做到这一点吗?事实上,有没有人为此编写了一个库??
(看起来你可以很容易地编写一个准引用器来读取 printf 格式规范并生成必要的 N-arg 函数......)
【问题讨论】:
【参考方案1】:如果您愿意接受“格式字符串”不是真正的字符串,那么您也可以直接在 Haskell 中实现类似 printf 的函数。
这已经被描述,例如,在 Ralf Hinze 的一篇名为“Formatting: a class act”的论文中。在 Hackage 上,我只能找到实现类似这种方法的 xformat 包。
【讨论】:
【参考方案2】:除了Printf-TH
,printf-mauke
似乎也有一些 TH 作为事后的想法......还有其他例子吗?
【讨论】:
【参考方案3】:是的,这是可能的。是的,已经完成了。你真的应该检查这种问题的hackage:http://hackage.haskell.org/package/Printf-TH
【讨论】:
有趣。我现在正在查看 Hackage,但我没有看到……哦等等,它不在 Text 下,它在 Utils 下。哇,看看它拥有的所有文档...... :-( @MathematicalOrchid 我刚刚检查了源代码,似乎没有使用黑线鳕标记记录该文件。奇怪的是没有人维护那个包......以上是关于类型安全的 printf的主要内容,如果未能解决你的问题,请参考以下文章