我想要声明一个AST作为Eq的一个实例,但不想为每个构造函数重复相同的步骤(如果所有子项都相同,则2个expr是相同的) 。所以第一个问题是,GHC“派生”是否足够?它有什么作用?如果没有,是否有一个干净的方法来避免重复?也许泛型编程?干净的方式来推导公式Eq
0
A
回答
1
的Eq
返回的派生实例True
两个对象x
和y
如果两个以下为真:
x
和y
通过相同的数据构造产生(并因此也具有相同的字段类型)- 的
x
和y
各个字段是彼此相等(经由它们的respecitveEq
实例)
例如,考虑
data Maybe a = Nothing | Just a
派生Eq
情况是这样的:
instance Eq a => Eq (Maybe a) where
Nothing == Nothing = True
(Just x) == (Just y) = x == y
_ == _ = False
1
GHC的推导完全符合你的描述。给定一个数据类型data X = A ... | B ... | C ...
它声明了两个相等的值,当它们具有相同的构造函数时,并且构造函数的所有参数也是相等的。这意味着每个构造函数的所有参数必须有一个Eq
约束。如果它们是具体类型,那么如果找不到Eq
实例,则派生将在编译时失败。如果它们是变量,则Eq
约束被传递到instance
定义中。
相关问题
- 1. 干净的方式来筛选列表
- 2. 最干净的方式来导入/需要一个Vue.js指令?
- 3. 以干净的方式重叠元素?
- 4. 如何在干净的方式
- 5. 一个干净的格式
- 6. 干净的方式来映射node.js或JavaScript中的数组
- 7. 干净的方式来填充numpy阵列的第三维
- 8. 干净的方式来测试不同值的许多条件?
- 9. 干净的方式来遍历在Python中成对的列表?
- 10. 干净的方式来填充元素的内容
- 11. 干净的方式来移动机器之间的python 3.6 venv?
- 12. 干净的方式来结束解析的野牛分析器
- 13. 干净的方式来计算雅可比阵的总和
- 14. 最干净的方式来查找列表中的匹配
- 15. 干净的方式来保存CoreData对象上的观察者?
- 16. 干净的方式从文本文件导入数据?
- 17. 最干净的方式来建立一个后备链?
- 18. 干净的方式来停止RMI服务器
- 19. 干净的方式来有条件地呈现HTML视图?
- 20. 一个干净的方式来写循环
- 21. 最干净的方式来写2布尔条件(4分支)
- 22. 最干净的方式来确定是否存在一行?
- 23. .NET实体框架,干净的方式来实现它?
- 24. 干净的方法来简化二进制表达式树
- 25. 干净的方式来映射对象到其他对象?
- 26. 干净的方式来滚动div divs当滚动
- 27. 干净的方式来禁用`__setattr__`,直到初始化后
- 28. 最干净的方式来重置表格
- 29. 最干净的方式来隐藏密码输入字段?
- 30. 干净的方式来包装和处理RMySQL连接?
您可以检查(通常是相当可读但uniquified命名)是GHC通过编译产生的衍生的实例代码与'-ddump-deriv'。查看GHC用户指南的6.13.1节,查看所有可以获得GHC的中间格式的列表。 –