En este código, estoy intentando que el primer parámetro en mi función de trabajador go
sea del tipo 'tipo familia'. Veo que en el tipo type families documentation una función similar insert
pertenece a la clase de tipo, mientras que en mi ejemplo a continuación no.¿Qué significa esta 'Variable de tipo ambiguo' a` en la restricción '?
Soy nuevo para escribir familias, así que tal vez las estoy usando incorrectamente, pero ¿qué significa este error?
{-# 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
ambiguo variable de tipo `a' de la restricción:
`K a' arising from an expression type signature at Data/Map2.hs:167:10-33
solución probable: añadir una firma tipo que fija estas variables (s) Tipo de
En primer lugar, tenga en cuenta que los contextos de tipo de datos ('datos (K a) => M a b = M a b') se han eliminado del idioma y nunca fueron útiles. Mirando las otras cosas ahora. –