型ファミリでデータ型を使用すると、興味深い状況が見つかりました。
コンパイラのエラー メッセージはNo instance for (C (ID ())) arising from a use of W
. これは、型ファミリ アプリケーションが飽和状態であっても、完全に評価されていないことを示唆しています。:kind! ID ()
と評価されるため、インスタンス()
に応じて使用する必要があります。C ()
{-# LANGUAGE GADTs, TypeFamilies, UndecidableInstances, FlexibleContexts #-}
type family ID t where
ID t = t
class C t where
instance C () where
data W where
W :: C (AppID t) => P t -> W
type family AppID t where
AppID t = (ConstID t) ()
type family ConstID t where
ConstID t = ID
data P t where
P :: P t
data A
w :: W
w = W (P :: P A)
どうにかして の評価を強制できID ()
ますか? コンパイラのバグですか?
私はGHC 7.8.3を使用しています