2011-03-23 16 views
13

Compilar el siguiente programa de Haskell con GHC 6.12.1 produce un error:Haskell: "No en su alcance: '>>'" sin preludio implícita

{-# LANGUAGE NoImplicitPrelude #-} 

module Example where 

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

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

A saber:

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

El el error desaparece cuando cambio la instrucción de importación a:

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

Esto tiene sentido. Lo que no entiendo, sin embargo, es por qué hay un error en primer lugar. Mi programa no parece hacer uso de ningún Monad, mientras que >> es uno de los operadores de Monad.

+6

¡Eso es raro! He agregado una definición sin sentido como '(>>) =" blah "' y todavía mecanografía y funciona como se esperaba; '(>>)' no se llama en absoluto, por lo que yo sé. Por lo que vale, tu primera versión funciona sin modificaciones en GHC 7.0.2. – yatima2975

Respuesta

9

No sé la causa raíz de este problema, pero si se compila el código con -ddump-rn-trace opción, se puede ver que el compilador por alguna razón pone (>>) en una lista de las definiciones utilizadas, algo así:

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

sin duda alguna se trata de un error en GHC 6.12.1

1

me puedo imaginar el compilador comprueba para ver si está presente >> (lo que se necesita para la compilación de do-bloques), no importa si hacen ocurre en tu código. (Pero entonces, también debería quejarse >> =)

2

Esto es un error en ghc. Usted debe reportarlo.

Cuestiones relacionadas