私は-XDataKinds
最近いじっていましたが、なぜFoo
以下が自動的に昇格されないのか疑問に思っていました:
{-# LANGUAGE
GADTs
, DataKinds
, KindSignatures #-}
import Data.HList
data Foo a where
Foo :: Bar a =>
a -> Foo a
data Baz where
Baz :: (a ~ HList (l :: [Foo *])) =>
a -> Baz
つまり、Baz
は の異種リストでありFoo a
、a
は によって制約されBar
ます。
このデータ型のプロモート バージョンを手動で作成する方法はありますか? どうすればそうすることができますか?種類を宣言できますか? のダミーの Haskell98 バージョンを作成して、Foo
それをモジュールか何かに分離できますか? 理想的には、制約コンテキストを保持したいのですが、Constraint
並べ替えはないと思います。どんなアイデアでもとても役に立ちます!