我实际上正在寻找带有'a -> string
之类的签名的函数,该函数将给定的多态类型转换为字符串。我已经考虑过类似的事情
let func elem = match elem with
| int -> string_of_int elem ...
希望有人可以帮助我,谢谢!
答案 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