[GHC] #13839: GHCi warnings do not respect the default module header (was: GHC warnings do not respect the default module header)

GHC ghc-devs at haskell.org
Sat Dec 8 16:35:18 UTC 2018


#13839: GHCi warnings do not respect the default module header
-------------------------------------+-------------------------------------
        Reporter:  Feuerbach         |                Owner:  RolandSenn
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  8.0.1
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by RolandSenn):

 Testing my patch, I found some behaviour, that may be unexpected /
 annoying for ghci users, specially beginners:

 Consider a module Foo.hs without a `main` function and without a module
 header:


 {{{
 nomain :: IO ()
 nomain = putStrLn usedVar

 usedVar :: String
 usedVar = "T13839"
 }}}


 Compiling with GHC 8.6 (`ghc -Wall Foo.hs`) gives:

 {{{
 [1 of 1] Compiling Main             ( Foo.hs, Foo.o )

 Foo.hs:1:1: error:
     The IO action ‘main’ is not defined in module ‘Main’
 }}}

 Loading into GHCi ''just works'':


 {{{
 ghci -Wall Foo.hs
 GHCi, version 8.6.2: http://www.haskell.org/ghc/  :? for help
 [1 of 1] Compiling Main             ( Foo.hs, interpreted )
 Ok, one module loaded.
 *Main>
 }}}

 Now with the new warnings I get:


 {{{
 GHCi, version 8.7.20181207: http://www.haskell.org/ghc/  :? for help
 [1 of 1] Compiling Main             ( Foo.hs, interpreted )

 Foo.hs:2:1: warning: [-Wunused-top-binds]
     Defined but not used: ‘nomain’

 Foo.hs:5:1: warning: [-Wunused-top-binds]
     Defined but not used: ‘usedVar’
 Ok, one module loaded.
 *Main>
 }}}

 We get the same warnings with GHC-8.6, after adding a `main` function.

 **In a module without a module header and without a `main` function GHCi
 will report
 ALL top level names as unused! **

 Therefore I propose to issue the requested warnings in GHCi only, if there
 is a `main` function available!


 @Feuerbach: Do you agree?

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13839#comment:5>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list