在 Haskell 中声明和使用种类

Declaring and working with Kinds in Haskell

我最近一直在玩 Haskell 的 -XDataKinds 功能,发现自己想要 创建 一种。

我不确定我的愿望是否能实现,但从 Edward Kmett 的 constraints package 看来,似乎有一个已声明的种类 Constraint(带有排序 BOX),它说是在GHC.Prim中定义,但是我找不到。

有什么方法可以在 Haskell 或 GHC 中手动声明一个种类吗?这可能需要手动断言用 data 声明的数据类型是正确的类型。我的想法是这样的:

data Foo :: BOX

data Bar a :: Foo where
  Bar :: a -> Bar a

在当前的 GHC(撰写本文时为 7.8)中,不能将新类型的声明与其类型级居民的声明分开。