Haskell では、次のtype
ように、型ファミリーを作成する宣言を含む型クラスを作成できます。
class ListLike k where
type Elem :: * -> *
fromList :: [Elem k] -> k
そして、次のようにインスタンスを記述します。
instance ListLike [a] where
type Elem [a] = a
fromList = id
instance ListLike Bytestring where
type Elem Bytestring = Char
fromList = pack
Idris で型クラスと型レベル関数を作成できることは承知していますが、メソッドは型自体ではなく、指定された型のデータを操作します。
上記のような Idris で型クラスに制約のある型ファミリを作成するにはどうすればよいですか?