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

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

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

{-# LANGUAGE TypeFamilies #-}

-- | key
class K a where
  -- | iterator for key
  type I a :: *
  mkI :: a -> I a

--| A map
data (K a) => M a b = M a b

insert :: (K a) => a -> b -> M a b -> M a b
insert = go mkI    -- <<< PROBLEM
  where
    go o a b m = m

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

`K a'

 возникающая из-за сигнатуры типа выражения в Data/Map2.hs:167:10-33

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

5
задан user239558 11 January 2012 в 23:00
поделиться