我是否可以安全地依赖OCaml的内置订单来进行枚举

时间:2016-09-23 18:51:35

标签: ocaml enumeration

我已经定义了一个类型:

type day = Monday | Tuesday | Wednesday | Thursday

我知道OCaml自动命令任何类型:

val (>=) : 'a -> 'a -> bool
     

结构排序功能。这些函数与整数,字符,字符串,字节序列和浮点数的通常排序一致,并将它们扩展为所有类型的总排序。

因此我可以尝试以下方法:

# Monday < Tuesday ;;
- : bool = true

我可以从我的实验中推断出任何和类型都会按照它们的定义顺序对其构造函数进行排序吗?它在某处记录了吗?如果我在我的应用程序中依赖这种行为,会被认为是不好的做法吗?

1 个答案:

答案 0 :(得分:3)

上次我看起来有点惊讶地发现没有记录总和类型的顺序。

如果你的构造函数不是无效的,那么顺序不是声明的顺序:

# type abc = A | B of int | C;;
type abc = A | B of int | C
# A <  B 0;;
- : bool = true
# C < B 0;;
- : bool = true

您可以从内部表示中推算出和类型的排序,但我认为它不能保证稳定。