Ho riscontrato uno strano problema durante la definizione di un vincolo predefinito. Se un vincolo è un'unità, l'istanza predefinita non viene scelta. In tutti gli altri casi, funziona come previsto.I tipi di vincoli predefiniti vengono ignorati
{-# LANGUAGE TypeFamilies, ConstraintKinds #-}
import qualified GHC.Exts as E
class Expression a where
type Constr a v :: E.Constraint
--type Constr a v =() -- with this line compilation fails
--type Constr a v = v ~ v -- compiles
wrap :: Constr a v => a -> Maybe v
instance Expression() where
wrap() = Just undefined
main = print (wrap() :: Maybe Int)
Qualcuno può chiarire le ragioni del comportamento del tipografo?
Indovinato, perché non esiste alcuna connessione tra il tipo 'v' e il mapping del tipo associato a cui si risolve? – ivanm
Possibilmente correlato: [Vincoli e vincoli vuoti associati predefiniti] (http://comments.gmane.org/gmane.comp.lang.haskell.glasgow.user/21058) – hammar