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-блоков), независимо от того, действительно ли это происходит в вашем коде.
(Но тогда он также должен жаловаться на → =)