我最近一直在玩弄-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
排序。任何想法都会非常有帮助!