首页 > 解决方案 > 更高种类的空约束

问题描述

我想有一个更高种类的空约束。

假设我有以下课程:

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)

标签: haskellconstraint-kinds

解决方案


您需要在类声明中给它一个明确的附加参数。

class Category k where
  type Obj k a :: Constraint

然后很容易使用低种类的()空约束来定义实例。

instance Category (->) where
  type Obj (->) a = ()

推荐阅读