为什么Int maxBound不起作用?

Eli*_*Eli 5 int constructor haskell

当我尝试

> Int maxBound
Run Code Online (Sandbox Code Playgroud)

在ghci,我明白了

Not in scope: data constructor 'Int'
Run Code Online (Sandbox Code Playgroud)

即使我import Data.Int,问题仍然存在.这里发生了什么?

li.*_*idm 11

编辑:该函数的官方文档位于http://www.haskell.org/ghc/docs/7.0.3/html/libraries/base-4.3.1.0/Prelude.html#v:maxBound

首先,你应该这样做

Prelude> maxBound :: Int
9223372036854775807
Prelude> 
Run Code Online (Sandbox Code Playgroud)

如果你看一下类型签名maxBound:

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

然后maxBound是一个返回类型的函数a,其中aBounded.但是,它不接受任何参数.Int maxBound意味着您正在尝试使用数据构造函数Int和参数创建内容maxBound.

对于您的特定错误消息,您尝试使用Int- 这是一种类型 - 作为值,从而导致您获得的错误.导入Data.Int无济于事.

  • 完全不谈,链接到zvon这些天是不好的做法:它已经过时了,有时会产生误导.最好链接到Prelude或基础库的Hackage文档. (4认同)

Don*_*art 6

这不是有效的Haskell.

maxBound是定义的那些类型中的最大元素的恒定Bounded:

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

要获取任何特定类型的边界,您需要将其专门化为特定类型.类型注释::表达式上的语法给出,如下所示:

Prelude> maxBound :: Int
9223372036854775807
Run Code Online (Sandbox Code Playgroud)