Haskell 为什么可以';我是否在类型族声明中使用约束类型?
我正在使用Haskell 为什么可以';我是否在类型族声明中使用约束类型?,haskell,types,constraints,type-families,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 typ
{-# 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'
然而,这似乎是完全可能的
编辑:我现在发现上述代码还有其他问题。
但是,这仍然是一个有效的问题。问题是因为默认情况下,
约束
不是从序言
导出的。您可以选择Constraint
来查找它的位置:
import Data.Kind (Constraint)
它为我解决了这个问题