如何将多态值转换为字符串?

时间:2018-12-12 16:40:05

标签: pattern-matching ocaml static-typing parametric-polymorphism

我实际上正在寻找带有'a -> string之类的签名的函数,该函数将给定的多态类型转换为字符串。我已经考虑过类似的事情

let func elem = match elem with
| int -> string_of_int elem ...

希望有人可以帮助我,谢谢!

1 个答案:

答案 0 :(得分:5)

不可能在OCaml中匹配类型,这是一个功能!这样的限制导致parametricity

简而言之,如果函数f的类型为'a -> string,则其类型承诺可以处理过去和将来的任何可能的类型。换句话说,函数f不能对其参数的内容做任何假设。

因此,唯一诚实的可能性是不要尝试从参数中读取任何内容,而只是返回一个字符串,例如

 let f _x = "x?"

可能地,我们可以使用函数g

来读取一些全局状态
let f _x = g ()

例如

let counter = ref 0
let f _x = incr counter; string_of_int !counter