2016-11-12 7 views
3

Возможно ли в ML разрешить переменную в ML иметь более одного типа?Как иметь более одного типа в ML?

Например, если я хочу, чтобы узел в дереве был только int или строкой.

Node of int * string 

Я пробовал это, но это просто приводит к типу кортежа (int, string). Я не хочу, чтобы это был кортеж, просто int или строка. Это разрешено?

+0

Это называется «союзный тип» afaik. Idk, если у ML есть их, но это то, что вы могли бы искать. – Carcigenicate

ответ

3

Как указано в комментарии, функция, которую вы ищете, представляет собой тип объединения. Я считаю, что синтаксис для них в SML является:

datatype Node = IntNode of int 
       | StringNode of string 
0

Просто обобщать @ большой ответ TimDestan немного: общее представление о стоимости, имеющей либо один тип или другой может быть закодировано в типе , Например, в Haskell и Scala у нас есть тип Either, который может содержать только значения двух разных типов. Мы можем определить то же самое в SML:

datatype ('a, 'b) either = Left of 'a | Right of 'b 

Теперь вы можете кодировать узел как:

Node of (int, string) either 

и узлы могут быть построены как:

Node (Left 1) 
Node (Right "hello") 

Это немного более легкий чем определение специального типа суммы для этого случая.