haskell - 更高种类的空约束

标签 haskell constraint-kinds

我想要一个更高类型的空约束。

假设我有以下类(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 Category k where
  type Obj k a :: Constraint

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

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

关于haskell - 更高种类的空约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55690357/

相关文章:

haskell - 如何在 Haskell 中将 Float 转换为 Int

haskell - stack的默认模板是什么?

haskell - 为什么这个表达式有一个有效的类型?

haskell - 约束种类: Pass multiple constraints

haskell - haskell中的双 map ?

haskell - 使用具有 'limited' 约束的约束种类和类型族

haskell - 带有约束的类型列表

haskell - 约束元组的可键入实例

haskell - 受限异构列表

windows - Haskell - 在 GHC 中编译问题