В этом коде я пытаюсь сделать так, чтобы первый параметр моей рабочей функции 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
Вероятное исправление: добавить сигнатуру типа, которая исправляет эти переменные типа