2016-09-23 1 views
1

Я определил тип:Могу ли я смело полагаться на OCaml встроенный для того, чтобы перечислений

type day = Monday | Tuesday | Wednesday | Thursday 

Я знаю, что заказы OCaml автоматически любого типа:

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

Структурные функции упорядочивания. Эти функции совпадают с обычными порядками над целыми числами, символами, строками, байтовыми последовательностями и числами с плавающей запятой и расширяют их до полного упорядочения по всем типам.

Поэтому я могу попробовать следующее:

# Monday < Tuesday ;; 
- : bool = true 

Могу ли я обобщать моих экспериментов, что любой тип сумма заказа своих конструкторов в том порядке, в котором они были определены? Это где-то задокументировано? Будет ли это считаться плохой практикой, если я полагаюсь на это поведение в своем приложении?

+1

Если вы хотите быть в безопасности, вы можете добавить в свой код вы можете добавить '' assert ((понедельник <вторник) && (вторник <среда) && (среда <четверг)); '' –

ответ

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 

Вы можете продумать упорядоченность от внутреннего представления для типов сумм, но я предполагаю, что это не гарантируется стабильный.

+0

Это напрямую не гарантируется быть, но он стабилен и останется таким же. – PatJ

Смежные вопросы