【发布时间】:2015-02-27 07:57:18
【问题描述】:
我正在尝试编写一个函数来比较两个给定图表中节点的度数列表,以进行同构的充分性测试,但我注意到以下代码引发了与 degs 类型相关的错误:
import Data.List
degreeNumbers :: (Eq a) => Graph a -> [Int]
degreeNumbers g = ...
isoByDegree :: (Eq a, Eq b) => Graph a -> Graph b -> Bool
isoByDegree g1 g2 = degs g1 == degs g2
where degs = sort . degreeNumbers
即使我尝试将 degs 与类似的显式声明绑定
where degs = (sort . degreeNumbers) :: (Eq c) => Graph c -> [Int]
它仍然说它在应用于g2 时期待Graph a 而不是Graph b。当然,有一个简单的解决方案
isoByDegree g1 g2 = (sort . degreeNumbers) g1 == (sort . degreeNumbers) g2
但我想知道绑定方法出了什么问题。
【问题讨论】:
-
这些 MR 问题在这里如此频繁地出现在 SO 上,我认为 GHC 至少应该默认警告它们(假设默认关闭 MR 是不可取的)。例如。对于类型错误,如果表达式包含一些单态推断的术语,GHC 应该输出关于它们的警告。