Ограничение значения SML - куча

По сути, я хочу, чтобы функция создала кучу из узла и 2 подпучка. Представление кучи выглядит следующим образом (где int в Cons представляет ранг узла)

datatype 'a heap = Empty | Heap of int * 'a * 'a heap *  'a heap

и моя функция:

fun makeHeap x h1 h2 = Heap ((rank h1)+1, x, h1, h2)

Программы компилируются, но когда я вызываю makeHeap, я получаю странное значение вместо кучи:

makeHeap(#"c", Empty, Empty);
stdIn:72.1-72.29 Warning: type vars not generalized because of
   value restriction are instantiated to dummy types (X1,X2,...)
val it = fn
 : (char * ?.X1 heap * ?.X2 heap) heap
    -> (char * ?.X1 heap * ?.X2 heap) heap
      -> (char * ?.X1 heap * ?.X2 heap) heap

1 ответ

Решение

Вы определили makeHeap в карри, но назовите это с аргументами Эти две формы подразумевают разные типы и, следовательно, не являются взаимозаменяемыми. Просто измените звонок на

makeHeap #"c" Empty Empty

Или измените определение на

fun makeHeap(x, h1, h2) = ...
Другие вопросы по тегам