Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Haskell: "Not in scope: '>>'" with no implicit prelude

Tags:

haskell

ghc

Compiling the following Haskell program with GHC 6.12.1 yields an error:

{-# LANGUAGE NoImplicitPrelude #-}

module Example where

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

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

Namely:

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

The error goes away when I change the import statement to:

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

This makes sense. What I don't understand, however, why there is an error in the first place. My program doesn't seem to make use of any Monad, while >> is one of the Monad operators.

like image 598
Marc Avatar asked Mar 23 '11 08:03

Marc


1 Answers

I don't know the root cause of this problem, but if you compile your code with -ddump-rn-trace option on, you can see that the compiler for some reason puts (>>) into a list of definitions used, something like that:

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

Most certainly it is a bug in GHC 6.12.1

like image 101
Marat Salikhov Avatar answered Oct 04 '22 21:10

Marat Salikhov