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 a,其中a受 约束Bar

有没有办法手动创建这种数据类型的升级版本?我该怎么做呢?可以声明种类吗?我可以制作一个虚拟的 Haskell98 版本Foo,并将其分成一个模块或其他东西吗?理想情况下,我想保留约束上下文,但我认为没有Constraint排序。任何想法都会非常有帮助!

4

0 回答 0