当我遇到一个函数时,是否有一般的方法来确定它是完全独立的还是类型类的一部分?例如:
fromIntegral :: (Integral a, Num b) => a -> b
这是我为找到答案而开发的方法:
:info
执行:info Integral
和:info Num
。forIntegral
就是这种情况)。我的方法听起来好吗?它一般有效吗?
答案 0 :(得分:12)
您可以直接对该功能:info
。
Prelude> :info fromInteger
class Num a where
...
fromInteger :: Integer -> a
-- Defined in `GHC.Num'
Prelude> :info fromIntegral
fromIntegral :: (Integral a, Num b) => a -> b
-- Defined in `GHC.Real'
如您所见,fromInteger
属于Num
类型类,而fromIntegral
则不属于。{/ p>
答案 1 :(得分:7)
有一种更简单的方法,比较:info fromIntegral
和:info fromInteger
的输出差异:
> :info fromIntegral
fromIntegral :: (Integral a, Num b) => a -> b
-- Defined in `GHC.Real'
> :info fromInteger
class Num a where
...
fromInteger :: Integer -> a
-- Defined in `GHC.Num'
了解如何将fromInteger
指定为类型类的一部分,但fromIntegral
不是?这就是你怎么说的。