В этом коде я пытаюсь сделать так, чтобы первый параметр в моей рабочей функции go
был типом «семейство типов». Я вижу, что в документации семейств типов аналогичная функция 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' arising from an expression type signature at Data/Map2.hs:167:10-33
Возможное исправление: добавьте сигнатуру типа, которая исправляет эти переменные типа.
data (K a) => M a b = M a b
) были удалены из языка и никогда не были полезными. Смотрю сейчас на другие вещи. - person Daniel Fischer   schedule 12.01.2012