【发布时间】:2020-11-14 14:12:24
【问题描述】:
我对 Haskell/Purescript 还很陌生,目前正在学习 PureScript by Example book。
在chapter 6 关于类型类中,exercise 4 有以下任务:
这是我的尝试:(中)给定任何类型
a和Ord的实例,我们可以添加一个新的“无限”值,该值大于任何其他值:data Extended a = Finite a | Infinite为
Extended a编写一个Ord实例,该实例重用a的Ord实例。
instance ordExtended :: Ord a => Ord (Extended a) where
compare Infinite Infinite = EQ
compare Infinite _ = GT
compare _ Infinite = LT
compare (Finite f1) (Finite f2) = compare f1 f2
不幸的是,代码触发了错误:
找不到类型类实例
Data.Eq.Eq(扩展 a0)
同时检查表达式#dict Eq 具有类型 { eq :: Extended a0 -> Extended a0 -> Boolean } 在值声明中排序扩展
其中 a0 是刚性类型变量 绑定在(第 0 行,第 0 列 - 第 0 行,第 0 列) PureScript(NoInstanceFound)
我不太明白错误信息:
-
expression #dict Eq是什么意思?我的代码中没有dict。 - 什么是刚性类型变量?
- 该错误似乎使用了不同的标识符,例如
a0(为什么?我假设是a)
在我的书中,Eq 类型类实例应该通过实现Ord 来覆盖,因为Ord 扩展了Eq。
【问题讨论】:
-
Haskell 不是纯脚本。我不知道你为什么要用 Haskell 标记一个纯脚本问题。
-
@Aplet123 至少从我读到的内容来看,Purescript 的许多语法/语言特性几乎等同于 Haskell(如类型类特性)。因此,想法是,这个问题也可能由有 Haskell 经验的人来回答。
标签: typeclass purescript