Предоставляет ли Opa алгебраические типы данных? - PullRequest
2 голосов
/ 04 марта 2012

Я пытаюсь глубже понять концепции, стоящие за Опа . В частности, мне любопытно решение не предоставлять разграниченные объединения, такие как в ML или Haskell (то есть определять несколько конструкторов, которые обертывают ноль или более значений), но придерживаться типов записей и их типов сумм. Это решение имеет для меня полное значение (возможно, потому, что я больше увлекаюсь ООП, чем ФП), и кажется, что можно реализовать все, что можно сделать с дискриминационным объединением.

Однако можем ли мы сказать, что язык все еще поддерживает алгебраические типы данных? Этот вопрос не практический, а скорее о терминологии.

Кстати, Википедия говорит, что да, возможно, это следует исправить.

1 Ответ

3 голосов
/ 04 марта 2012

В Opa все является рекордом, и вы действительно можете реализовать то, что можно сделать с дискриминационным объединением.

Где в ocaml вы напишите type tree = Leaf of int | Node of tree * tree

В Opa это будет type tree = {int leaf} or {tree left, tree right}

Вы можете заметить, что, в отличие от Ocaml, в Opa вы можете манипулировать записями без явного определения их типа.Вот почему, даже если Opa использует только записи, все равно просто определить дискриминируемое объединение.

Кстати, вы смотрели на http://doc.opalang.org/manual/The-type-system?

...