9

型ファミリでデータ型を使用すると、興味深い状況が見つかりました。

コンパイラのエラー メッセージは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を使用しています

4

1 に答える 1

2

問題は、のようなものですConstID

type family ConstID t a where
  ConstID t a = ID a
于 2014-09-17T08:53:56.067 に答える