haskell - 更高种类的空约束
问题描述
我想有一个更高种类的空约束。
假设我有以下课程:
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 = ()
推荐阅读
- mysql - SQL find values that starts with a string
- python-3.x - 图/照片的第二个标题是 CSV 中列的值,但只有最后一个值用于所有照片
- c++ - What is the best way to dump a bit string to a binary file
- python - 循环遍历具有多行和多列的嵌套列表
- python - Python / PySerial / Arduino 读取串行数据,然后将这个确切的串行数据写入 txt 文件
- arduino-esp8266 - 从 Nodemcu ESP32 和 Firebase 发送传感器数据
- javascript - 如何使我的网页上的褪色背景大小相同?
- angular - 角度网页之间的导航
- assembly - 带PIC16F887的红外接收器,汇编语言
- javascript - 为什么我的日期计算属性对更改没有反应?