Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell:Doesnumclass";继承;情商课?_Haskell - Fatal编程技术网

Haskell:Doesnumclass";继承;情商课?

Haskell:Doesnumclass";继承;情商课?,haskell,Haskell,从哈斯克尔那里,我学到了: lucky :: Integral a => a -> String lucky 7 = "lucky number seven!" lucky x = "try again" 但是,当我这样做的时候 lucky :: Num a => a -> String lucky 7 = "lucky number seven!" lucky x = "try again" 我明白了 那么,我会的 lucky :: (Eq a, Num a) =&

从哈斯克尔那里,我学到了:

lucky :: Integral a => a -> String
lucky 7 = "lucky number seven!"
lucky x = "try again"
但是,当我这样做的时候

lucky :: Num a => a -> String
lucky 7 = "lucky number seven!"
lucky x = "try again"
我明白了

那么,我会的

lucky :: (Eq a, Num a) => a -> String
lucky 7 = "lucky number seven!"
lucky x = "try again"
而且,编译器很高兴

Num类型的类不是继承了Eq类吗


说(numa,Eq a)似乎是多余的。从Haskell 98报告中,他们有一个标准类的很好的图表(是的,视觉!),它看起来确实是“继承的”。

Haskell报告建议
Num
应该是
Eq
Show
的子类,但是如果你在ghc中查找
Num
类,那么它就不是


这一变化似乎是在

中引入的,为什么做出这一决定?是否存在某些类型的数字表示形式,其中无法施加默认的相等约束?@kishlaya我在这里找到了答案:。简而言之,有些对象(例如无限序列)的
Eq
可能无法在有限时间内实现,而其余的
Num
方法可能无法实现。实数可以表示为有理数的cauchy序列的等价类,因此,
Eq
可能无法合理实现。实例Num a=>Num(x->a)被Eq(以及较小程度的Num)作为超类阻止。事实上,很多人想要使用这个实例,否则就不得不撒谎并声称你可以比较函数,这最终让Ian在GHC中删除Num中的Eq和Show超类约束,尽管这是与Haskell 98的一个突破,但这不是到目前为止唯一的例子。“很多人”我不相信。大概是同一批顽固的人把FTP更改强加给了明智的哈斯凯勒。这些流氓最糟糕的是,他们无法选择放弃GHC中的这些变化,以达到符合标准的语言版本,用于教学目的(以及避免奇怪类型的信息,如本q)。
lucky :: (Eq a, Num a) => a -> String
lucky 7 = "lucky number seven!"
lucky x = "try again"