检查OCaml中某些值v的类型

时间:2014-02-07 10:06:41

标签: types polymorphism ocaml

我有一些v其中v可以是int,bool,甚至像string option * string这样的东西,如何检查v是int,bool还是字符串选项* string?

如果这是不可能的话,那么我可能会接近我的问题。

根据v是什么,我想返回具有相同多态类型的不同类型,例如,键入我声明的'value'。

1 个答案:

答案 0 :(得分:3)

如果需要,可以使用GADT:

type _ value =
  Int    : int -> int value
| String : string -> string value
| Bool   : bool -> bool value

let get_value : type v. v value -> v = function
  Int i -> i
| String s -> s
| Bool b -> b

例如:

let _ =
  Printf.printf "%d %s %b\n%!" 
   (get_value (Int 2)) 
   (get_value (String "toto")) 
   (get_value (Bool false))

您可以在http://try.ocamlpro.com/上测试它应该有效的代码。