Нет конструктора типов для типов записей?

Я переводил следующий код Haskell в OCaml:

data NFA q s = NFA
{ intialState :: q
, isAccepting :: q -> Bool
, transition  :: q -> s -> [q]
}

Сначала я попробовал очень дословный перевод:

type ('q,'s) nfa = NFA of { initialState: 'q;
                            isAccepting:  'q -> bool;
                            transition:   'q -> 's -> 'q list }

... и, конечно, это дает синтаксическую ошибку, потому что часть конструктора типа, "NFA of" не допускается. Должно быть:

 type ('q,'s) nfa = { initialState: 'q;
                      isAccepting:  'q -> bool;
                      transition:   'q -> 's -> 'q list }

Это заставило меня задуматься, почему это так. Почему у вас не может быть конструктора типа для типа записи так же, как для типа кортежа (как показано ниже)?

type ('q, 's) dfa = NFA of ('q * ('q->bool) * ( 'q -> 's -> 'q list) )
7
задан aneccodeal 29 December 2011 в 00:12
поделиться