如何将命名字符串类型转换为字符串

时间:2015-11-12 19:26:15

标签: ocaml

我有一个命名字符串类型:

type t = string

所以我可以这样做:

let (x:t) = "Hello";;
(* val x : t = "Hello" *)
x ^ "Hi";;
(* - : t = "HelloHi" *)

我的问题是如何才能将字符串x返回到 string ,以便我在其他地方将其用作字符串?

主要限制是我想要更改类型t以使用这样的构造函数:

type t = StringType of string

我想做的是什么?

2 个答案:

答案 0 :(得分:1)

正如@PierreG所说,您的类型t只是string的同义词。您无需执行任何操作即可将t类型的值视为字符串。

您可能想知道的一个原因是顶层需要在类型的可用同义名称中进行选择。它试图选择一个看起来像你最近一直在考虑价值的方式。但所有名称(如tstring)都同样有效。

答案 1 :(得分:1)

你不需要这样做,在我的顶级(OCaml 4.01.0)上,这非常好:

# type t = string;;
type t = string
# let x:t = "Hello";;
val x : t = "Hello"
# String.contains x 'H';;
- : bool = true

但是我没有得到别名类型的要求,OCaml类型推断非常强大,因此通常可以避免显式类型声明,让编译器为你推断它们。

例如

# type t = string;;
type t = string
# let f x y = compare x y;;
val f : 'a -> 'a -> int = <fun>
# let x : t = "Hello";;
val x : t = "Hello"
# let y : t = "Hello";;
val y : t = "Hello"
# f x y;;
- : int = 0

无需使用任何显式数据类型注释f