Haskell的类型安全是第二首屈一指只依赖类型语言。但是Text.Printf有一些深层的魔力,似乎很打字。
> printf "%d\n" 3
3
> printf "%s %f %d" "foo" 3.3 3
foo 3.3 3
这背后的深层魔力是什么?Text.Printf.printf
函数如何接受像这样的可变参数?
Haskell中允许可变参数使用的一般技术是什么,它是如何工作的?
(附带说明:使用此技术时,某些类型的安全性显然丢失了。)
> :t printf "%d\n" "foo"
printf "%d\n" "foo" :: (PrintfType ([Char] -> t)) => t
15
您只能使用从属类型获得类型安全的printf。
—
2011
伦纳特说得很对。Haskell的类型安全性比Haskell依赖类型更多的语言第二。当然,如果您为格式选择比字符串更多的信息类型,则可以使类似printf的事物类型安全。
—
猪场
有关printf的多种变体,请参见oleg
—
sclv 2011年
@augustss您只能使用依赖类型或模板哈希来获取类型安全的printf!;-)
—
MathematicalOrchid
@MathematicalOrchid模板Haskell不计算在内。:)
—
2013