首页 > 解决方案 > 为什么我不能在类型族声明中使用约束类型?

问题描述

我在用着

{-# 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'

然而,这似乎是完全可能的。


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

标签: haskelltypesconstraintstype-families

解决方案


问题是因为Constraint默认情况下不会从Prelude. 您可以通过 hoogleConstraint找到它的位置:

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

import Data.Kind (Constraint)

它为我解决了这个问题。


推荐阅读