Num是否以这种方式特别?

has*_*lHQ 0 haskell

我可以这样创建Num a => a:

foo :: Num a => a
foo = 2
Run Code Online (Sandbox Code Playgroud)

同样对于任何其他数字类:

foo :: Fractional a => a
foo = 2.0
Run Code Online (Sandbox Code Playgroud)

但是,我不能想办法创造型的东西Eq a => a,Ord a => a或任何非数(不使用undefined).

在我看来,数字在这方面是特殊的.

是吗?

ama*_*loy 6

Num从某种意义上来说它并不是"特殊的",它是唯一能够以这种方式表现的东西.但它确实具有一些使其成为可能的特征.请考虑Bounded类型类.完全可以定义类似的功能:

top :: Bounded a => a
top = maxBound
Run Code Online (Sandbox Code Playgroud)

这是可能的,因为Bounded,就像它的类定义的一部分Num一样Eq,它提供了一种创建其类型值的方法.


Dan*_*ner 5

还有更多的例子:

def :: Default a => a
mempty :: Monoid a => a
maxBound :: Bounded a => a
toEnum 0 :: Enum a => a
read "" :: Read a => a
fromString "" :: IsString a => a
Run Code Online (Sandbox Code Playgroud)

这只是我的头脑.我相信还有更多.