Haskell: "Не в масштабе:" >> ", без подразумеваемой прелюдии

Компиляция следующей программы Haskell с GHC 6.12.1 дает ошибку:

{-# LANGUAGE NoImplicitPrelude #-}

module Example where

import Prelude(Integer, fromInteger, (==))

f :: Integer -> Integer
f n
    | n == 0 = 0

А именно:

example.hs: 9: 6: не в области: ` → '

Ошибка при изменении инструкции импорта:

import Prelude(Integer, fromInteger, (==), (>>))

Это имеет смысл. Однако я не понимаю, почему в первую очередь возникает ошибка. Моя программа, похоже, не использует какой-либо Monad, а >> является одним из операторов Monad.

Ответы

Ответ 1

Я не знаю причину этой проблемы, но если вы скомпилируете свой код с опцией -ddump-rn-trace, вы увидите, что компилятор по какой-то причине помещает (>>) в список используемых определений, что-то вроде что:

    finish Dus [(Nothing, [(314, Integer)]),
            (Just [(rdd, f)], [(01D, >>), (01E, fromInteger), (01L, ==)]),
            (Nothing, [])]

Скорее всего, это ошибка в GHC 6.12.1

Ответ 2

Это ошибка в ghc. Вы должны сообщить об этом.

Ответ 3

Я могу представить, что компилятор проверяет, присутствует ли → (что необходимо для компиляции do-блоков), независимо от того, действительно ли это происходит в вашем коде. (Но тогда он также должен жаловаться на → =)