为什么不能在类型族声明中使用约束类型?

时间:2018-10-27 11:10:29

标签: haskell types constraints type-families

我正在使用

{-# LANGUAGE TypeFamilies, DataKinds, ConstraintKinds, ExistentialQuantification #-}

并输入以下代码:

class NoConstraint x where {}
instance forall x. NoConstraint x where {}

type family Classes (c :: [* -> Constraint]) (x :: *) :: Constraint
type instance Classes [] x = NoConstraint x
type instance Classes (h : t) x = (h x, Classes t x)

但是,GHC(i)通过以下方式拒绝了此请求:

Not in scope: type constructor or class `Constraint'

但是,这似乎应该是完全可能的。


编辑:我现在发现上述代码还存在其他问题。
但是,这仍然是一个有效的问题。

1 个答案:

答案 0 :(得分:3)

问题是因为默认情况下Constraint并未从Prelude导出。您可以勾住Constraint来查找位置:

尝试将以下内容添加到您的模块中:

import Data.Kind (Constraint)

它为我解决了问题。