2011-03-23 72 views
13

編譯與GHC 6.12.1下面的Haskell程序產生一個錯誤:Haskell中: 「不在範圍: '>>'」,沒有隱式前奏

{-# LANGUAGE NoImplicitPrelude #-} 

module Example where 

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

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

即:

example.hs:9:6: Not in scope: `>>'

的當我更改導入語句時錯誤消失:

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

這很有道理。然而,我不明白爲什麼首先出現錯誤。我的程序似乎沒有使用任何Monad,而>>是Monad運營商之一。

+6

這很奇怪!我添加了一個無意義的定義,比如'(>>)=「blah」',它仍然按照預期進行類型檢查和工作。據我所知,「(>>)」根本不叫。對於它的價值,您的第一個版本在GHC 7.0.2中未作修改。 – yatima2975 2011-03-23 09:35:15

回答

9

我不知道這個問題的根本原因,但如果你對-ddump-rn-trace選項編譯代碼,你可以看到,編譯器因某種原因使(>>)到使用的定義列表,類似的東西:

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

大多數肯定是在GHC的錯誤6.12.1

1

我能想象編譯器檢查,看是否>>存在(它需要的DO-塊編譯),如果這樣做不管發生在你的代碼中。 (但那麼,它也應該抱怨>> =)

2

這是ghc中的一個錯誤。你應該報告它。

相關問題