Encontré un problema extraño al definir una restricción predeterminada. Si una restricción es una unidad, la instancia predeterminada no se elige. En todos los demás casos, funciona como se esperaba.Los tipos de restricción predeterminados se ignoran
{-# 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)
¿Alguien puede aclarar las razones del comportamiento del typechecker?
Supongo que no existe una conexión entre el tipo 'v' y el tipo de correlación de tipos asociados. – ivanm
Posiblemente relacionado: [ConstraintKinds y las restricciones vacías asociadas predeterminadas] (http://comments.gmane.org/gmane.comp.lang.haskell.glasgow.user/21058) – hammar