Что означает эта «переменная неоднозначного типа« a »в ограничении»?

StackOverflow https://stackoverflow.com/questions/8827934

  •  27-10-2019
  •  | 
  •  

Вопрос

В этом коде я пытаюсь сделать так, чтобы первый параметр в моей рабочей функции go был типом «семейство типов».Я вижу, что в документации по семействам типов типа аналогичная функция insert принадлежит классу типа, а в моем примере нижеэто не так.

Я новичок в типах семейств, поэтому, возможно, я использую их неправильно, но что означает эта ошибка?

родовое слово <цитата>

Переменная неоднозначного типа `a 'в ограничении:

родовое слово

Возможное исправление: добавьте подпись типа, которая исправляет эти переменные типа

Это было полезно?

Решение

Это компилирует:

родовое слово

Что я изменил и почему?

Во-первых, я предположил, что вы хотите установить ограничение на M, поэтому я использовал форму определения типа, которая обеспечивает соблюдение ограничения и делает его доступным на сайтах использования, GADT.

Во-вторых, проблема, на которую пожаловался ваш GHC, - неоднозначность.Дело в том, что компилятор не может определить какой код-код-код-код он должен использовать, поэтому мы должны сообщить об этом.Для этого мы должны перенести используемые переменные типа в область видимости, а затем сообщить компилятору в локальной сигнатуре, какой экземпляр типа использовать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top