9

私は-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 aaは によって制約されBarます。

このデータ型のプロモート バージョンを手動で作成する方法はありますか? どうすればそうすることができますか?種類を宣言できますか? のダミーの Haskell98 バージョンを作成して、Fooそれをモジュールか何かに分離できますか? 理想的には、制約コンテキストを保持したいのですが、Constraint並べ替えはないと思います。どんなアイデアでもとても役に立ちます!

4

0 に答える 0