9
定义默认约束时,我遇到了一个奇怪的问题。如果约束是单位,则不选择默认实例。在所有其他情况下,它按预期工作。忽略默认约束类型
{-# 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行为的原因吗?
有人猜测,因为'v'类型与关联类型映射解析为什么没有关系? – ivanm
可能相关:[ConstraintKinds和默认关联空约束](http://comments.gmane.org/gmane.comp.lang.haskell.glasgow.user/21058) – hammar