デフォルトの制約を定義するときに奇妙な問題が発生しました。制約が単位の場合、デフォルトのインスタンスは選択されません。他のすべての場合、期待どおりに機能します。
{-# 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)
誰かがタイプチェッカーの動作の理由を明確にすることができますか?