String 类型安全打印

String 类型安全打印,string,haskell,types,String,Haskell,Types,标准库提供了一个printf函数,该函数管理varadic。但是,它没有做的是编译时检查参数类型是否与格式字符串匹配。这需要依赖类型,而且听起来也很难实现!(您必须使用类型签名解析整个格式字符串…真恶心!) 但是经过深思熟虑,现在我想知道。。。我们可以用模板Haskell做这个吗?事实上,有没有人已经为此编写了一个库 (看起来您可以相当轻松地编写一个准引号,读取printf格式规范并生成必要的N-arg函数…是的,这是可能的。是的,已经完成了。你真的应该检查一下hackage是否有这种问题:除了

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

但是经过深思熟虑,现在我想知道。。。我们可以用模板Haskell做这个吗?事实上,有没有人已经为此编写了一个库


(看起来您可以相当轻松地编写一个准引号,读取printf格式规范并生成必要的N-arg函数…

是的,这是可能的。是的,已经完成了。你真的应该检查一下hackage是否有这种问题:

除了
Printf TH
,似乎
Printf mauke
也有一些TH作为事后考虑。。。还有其他例子吗?

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


例如,拉尔夫·辛兹(Ralf Hinze)在一篇名为“”的论文中描述了这一点。关于Hackage,我只能找到实现类似于此方法的包。

很有趣。我现在在看黑客,我看不到。。。哦,等等,它不是在文本下,而是在Utils下。哇,看看它所有的文档…:-(@MathematicalOrchid我刚刚检查了源代码,似乎该文件没有使用haddock标记进行记录。奇怪的是,没有人维护该包。。。