确定函数是独立的还是类型类的一部分

sta*_*ser 6 haskell

当我遇到一个函数时,是否有一种通用的方法来确定它是完全独立的还是类型类的一部分?例如:

fromIntegral :: (Integral a, Num b) => a -> b
Run Code Online (Sandbox Code Playgroud)

这是我为找到答案而开发的方法:

  1. 转到GHCI做:info对所有列出类的限制,在这种情况下:info Integral:info Num.
  2. 检查是否有任何列出该功能.
  3. 如果是,它就是该类型类的一部分.如果没有,那就是一个独立的功能(就是这种情况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不是.


bhe*_*ilr 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'
Run Code Online (Sandbox Code Playgroud)

看看如何fromInteger指定为类型类的一部分,但fromIntegral不是?这就是你怎么说的.