更高种类的空约束
Higher kinded empty constraint
我想在更高的种类上有一个空约束。
假设我有以下 class:
class Category k where
type Obj k :: * -> Constraint
id :: Obj k a => a `k` a
(.) :: (Obj k a, Obj k b, Obj k c) => b `k` c -> a `k` b -> a `k` c
现在我想为函数创建一个实例,这样它就不会以任何方式限制元素。 Obj
的实例是什么?
instance Category (->) where
type Obj (->) = ?
id = \a -> a
f . g = \a -> f (g a)
您需要在 class 声明中为其提供明确的附加参数。
class Category k where
type Obj k a :: Constraint
然后很容易使用较低种类的 ()
空约束来定义实例。
instance Category (->) where
type Obj (->) a = ()
我想在更高的种类上有一个空约束。
假设我有以下 class:
class Category k where
type Obj k :: * -> Constraint
id :: Obj k a => a `k` a
(.) :: (Obj k a, Obj k b, Obj k c) => b `k` c -> a `k` b -> a `k` c
现在我想为函数创建一个实例,这样它就不会以任何方式限制元素。 Obj
的实例是什么?
instance Category (->) where
type Obj (->) = ?
id = \a -> a
f . g = \a -> f (g a)
您需要在 class 声明中为其提供明确的附加参数。
class Category k where
type Obj k a :: Constraint
然后很容易使用较低种类的 ()
空约束来定义实例。
instance Category (->) where
type Obj (->) a = ()