我最近一直在玩-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
约束。
有没有办法手动创建此数据类型的推广版本?我该怎么做呢?可以宣布吗?我可以制作Foo
的虚拟Haskell98版本,并将其分成模块或其他东西吗?理想情况下,我想保留约束上下文,但我认为没有Constraint
排序。任何想法都会非常有用!