Типы ограничений по умолчанию игнорируются

Я столкнулся со странной проблемой при определении ограничения по умолчанию. Если ограничение равно единице, экземпляр по умолчанию не выбирается. Во всех остальных случаях работает как положено.

{-# 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)

Кто-нибудь может прояснить причины поведения typechecker?

9
задан Matt Fenwick 30 April 2012 в 18:09
поделиться