Что означает эта «переменная неоднозначного типа« a »в ограничении»?
-
27-10-2019 - |
Вопрос
В этом коде я пытаюсь сделать так, чтобы первый параметр в моей рабочей функции go
был типом «семейство типов».Я вижу, что в документации по семействам типов типа аналогичная функция insert
принадлежит классу типа, а в моем примере нижеэто не так.
Я новичок в типах семейств, поэтому, возможно, я использую их неправильно, но что означает эта ошибка?
родовое слово <цитата>Переменная неоднозначного типа `a 'в ограничении:
родовое словоВозможное исправление: добавьте подпись типа, которая исправляет эти переменные типа
Решение
Это компилирует:
родовое словоЧто я изменил и почему?
Во-первых, я предположил, что вы хотите установить ограничение на M
, поэтому я использовал форму определения типа, которая обеспечивает соблюдение ограничения и делает его доступным на сайтах использования, GADT
.
Во-вторых, проблема, на которую пожаловался ваш GHC, - неоднозначность.Дело в том, что компилятор не может определить какой код-код-код-код он должен использовать, поэтому мы должны сообщить об этом.Для этого мы должны перенести используемые переменные типа в область видимости, а затем сообщить компилятору в локальной сигнатуре, какой экземпляр типа использовать.