почему Int maxBound не работает? - PullRequest
4 голосов
/ 24 апреля 2011

Когда я пытаюсь

> Int maxBound

в ghci, я получаю

Not in scope: data constructor 'Int'

Даже если я import Data.Int, проблема все еще сохраняется.Что здесь происходит?

Ответы [ 2 ]

10 голосов
/ 24 апреля 2011

РЕДАКТИРОВАТЬ: Официальные документы для функции в 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> 

Если вы посмотрите на подпись типа maxBound:

Prelude> :t maxBound
maxBound :: (Bounded a) => a

Тогда maxBound - это функция, которая возвращает что-то типа a, где a равно Bounded. Тем не менее, он не принимает никаких параметров. Int maxBound означает, что вы пытаетесь создать что-то с помощью конструктора данных Int и параметра maxBound.

Для вашего конкретного сообщения об ошибке вы пытаетесь использовать Int - это тип - в качестве значения, что приводит к получаемой вами ошибке. Импорт Data.Int не поможет.

6 голосов
/ 24 апреля 2011

Это недопустимо в Haskell.

maxBound - это константа, определяющая максимальный элемент типов в классе Bounded :

Prelude> :t maxBound
maxBound :: Bounded a => a

Чтобы получить границу для какого-либо конкретного типа, вам нужно специализировать его для определенного типа. Тип аннотаций задается синтаксисом :: в выражениях, например:

Prelude> maxBound :: Int
9223372036854775807
...