В этом коде я пытаюсь получить первый параметр в моей рабочей функции go
типа типа типа. Я вижу, что в типе type families documentation аналогичная функция insert
относится к типу класса, а в моем примере ниже - нет.Что означает эта переменная типа «a» в ограничении?
Я новичок в типах семей, поэтому, возможно, я использую их неправильно, но что означает эта ошибка?
{-# 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
неоднозначных тип переменной `а» в ограничении:
`K a' arising from an expression type signature at Data/Map2.hs:167:10-33
Возможная ошибка: добавить сигнатуру типа, который фиксирует эти типа переменной (ы)
Прежде всего обратите внимание, что контексты данных ('data (K a) => M a b = M a b') были удалены с языка и никогда не были полезными. Теперь посмотрим на другое. –