SML: разница между типом и типом данных

Я новичок в SML, и я хотел бы убедиться, что действительно знаю основы. В чем разница между типом и типом данных в SML и когда что использовать?


person Horse SMith    schedule 06.11.2013    source источник


Ответы (3)


Объявления type просто дают другое имя существующему типу. Объявление type t = int * int просто означает, что теперь вы можете писать t вместо int * int — на самом деле это не обеспечивает никакой функциональности.

datatype определения позволяют создавать совершенно новые типы, вводя новые конструкторы данных. Конструкторы данных — это ключевые слова и символы, которые вы используете для создания и сопоставления значений с образцом, таких как nil и :: типа списка. В этих идентификаторах нет ничего особенного; вы можете определить их самостоятельно так же легко, как это:

datatype 'a list = nil | :: of 'a * 'a list
person Nick Barnes    schedule 06.11.2013
comment
Один нит: nil и :: — это конструкторы data. Конструктор типа — это тип с параметрами, например. list себя. - person Andreas Rossberg; 05.02.2014

Типы данных в sml могут иметь более одного типа, например.

datatype a = SomeType | SomeOtherType

Вы можете использовать их при проверке типов, например.

fun doThings (var : a) : bool =
    case var of
       (SomeType) => true
       (SomeOtherType) => false
person crawton    schedule 06.11.2013

Вы можете думать об этом так: типы предназначены для непрозрачных и атомарных типов, а datatype — для типов с конструкторами и т. д., которые можно деструктурировать, в основном при сопоставлении с образцом в выражениях.

datatype может также предоставлять представление простого типа, если он реализует непрозрачный тип (объявленный с помощью type в сигнатуре и определенный как datatype в структуре, реализующей сигнатуру).

Атомарные типы, такие как int и word, можно рассматривать как деструктурируемые типы в некотором отношении, как с арифметической интерпретацией чисел Пеано, но SML int, word и не так хорошо называемый real являются примитивными типами.

person Hibou57    schedule 04.02.2014