当我遇到一个函数时,是否有一种通用的方法来确定它是完全独立的还是类型类的一部分?例如:
fromIntegral :: (Integral a, Num b) => a -> b
Run Code Online (Sandbox Code Playgroud)
这是我为找到答案而开发的方法:
:info对所有列出类的限制,在这种情况下:info Integral和:info Num.forIntegral).我的方法听起来好吗?它一般有效吗?
kqr*_*kqr 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'
Run Code Online (Sandbox Code Playgroud)
如您所见,fromInteger属于Num类型类,而fromIntegral不是.
有一种更简单的方法,比较输出的差异: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'
Run Code Online (Sandbox Code Playgroud)
看看如何fromInteger指定为类型类的一部分,但fromIntegral不是?这就是你怎么说的.