Ocaml中是否有单个案例变体的用例?

f#

我一直在阅读 F# 文章,他们使用单个案例变体来创建不同的不兼容类型。但是在 Ocaml 中,我可以使用私有模块类型或抽象类型来创建不同的类型。在 Ocaml 中使用像 F# 或 Haskell 这样的单例变体是否很常见?

回答

单个构造函数变体的另一个特殊用例是使用 GADT(和存在量化)擦除一些类型信息。例如,在

type showable = Show: 'a * ('a -> string) -> showable
let show (Show (x,f)) = f x
let showables = [ Show (0,string_of_int); Show("string", Fun.id) ]

构造函数Show将给定类型的元素与打印函数配对,然后忘记元素的具体类型。这使得拥有一个showable元素列表成为可能,即使每个元素都有不同的具体类型。


以上是Ocaml中是否有单个案例变体的用例?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>