![]() |
1
8
对于问题1,您遗漏了一个非常重要的上下文。
您引用的那些定义属于一个类。这意味着实例可以覆盖它们。此外,最小的pragma说,为了工作,必须在实例中至少重写其中一个。所以每当在一个特定的实例中重写一个递归时,就会中断递归。这就像
对于第二个问题,
三个人-你说得对。继续简化!
所以GHCI给你的
|
![]() |
2
5
这不是递归。在你的例子中
统一工作如下:
已从重命名第一个参数
编辑: 一致性
为了显示两个公式的一致性,首先让我们重写
最好把所有的点都放在定义中。所以我们得到,
所以我们要检查
首先我们需要的是
第二,我们需要
这就要求
|
![]() |
3
4
每个实例都负责覆盖这两个实例中的至少一个。这是以机器可读的方式记录在类顶部的pragma中的:
此pragma声明实例编写器必须至少定义
如果
我不。。。事实上,你所陈述的事实中有任何矛盾。所以我不知道如何为你解释这个矛盾。然而,你的符号中有一些不符合的地方,可能与你思考中的错误有关,所以让我们简单地谈谈它们。 你写的
这并不完全正确;因为
类型
属于
函数由两部分组成:从对象到对象的映射,以及从箭头到与对象映射兼容的箭头的映射。在哈斯克尔
这个
你已经注意到了
|
![]() |
4
2
在这里,我不同意GHC开发人员的编码风格:) 我想说一个人不应该写
但是,相反,使用等价物
因为后者明确表示我们正在取消应用程序操作。
(实际上,由于技术原因,GHC DEV不能使用
现在,你可能想知道为什么
因此,ETA合同
的确,
因此,主要区别在于:
|
![]() |
trpnd · 如何定义由两个任意单声道变压器组成的单声道变压器? 2 年前 |
![]() |
Fabus1184 · Haskell mapM_不打印 2 年前 |
![]() |
Gotthold · 基于范数约束向量的类型 2 年前 |
![]() |
jian · haskell将另一个函数用作输入参数 3 年前 |
![]() |
Jocafrei · 用Haskell函数实现最大公约数函数 6 年前 |