[GHC] #14368: GHC 8.2.1 doesn't inform you when the monomorphism restriction kicks in anymore

GHC ghc-devs at haskell.org
Wed Oct 18 13:16:36 UTC 2017


#14368: GHC 8.2.1 doesn't inform you when the monomorphism restriction kicks in
anymore
-------------------------------------+-------------------------------------
           Reporter:  RyanGlScott    |             Owner:  (none)
               Type:  bug            |            Status:  new
           Priority:  normal         |         Milestone:
          Component:  Compiler       |           Version:  8.2.1
  (Type checker)                     |
           Keywords:                 |  Operating System:  Unknown/Multiple
       Architecture:                 |   Type of failure:  Poor/confusing
  Unknown/Multiple                   |  error message
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 This program doesn't typecheck due to the monomorphism restriction:

 {{{#!hs
 f = (==)
 }}}

 In GHC 8.0.2, the error message was quite helpful in informing you of this
 fact:

 {{{
 GHCi, version 8.0.2: http://www.haskell.org/ghc/  :? for help
 Loaded GHCi configuration from /home/rgscott/.ghci
 [1 of 1] Compiling Main             ( Bug.hs, interpreted )

 Bug.hs:1:1: error:
     • Ambiguous type variable ‘a0’ arising from a use of ‘==’
       prevents the constraint ‘(Eq a0)’ from being solved.
       Probable fix: use a type annotation to specify what ‘a0’ should be.
       These potential instances exist:
         instance Eq Ordering -- Defined in ‘GHC.Classes’
         instance Eq Integer
           -- Defined in ‘integer-gmp-1.0.0.1:GHC.Integer.Type’
         instance Eq a => Eq (Maybe a) -- Defined in ‘GHC.Base’
         ...plus 22 others
         ...plus 7 instances involving out-of-scope types
         (use -fprint-potential-instances to see them all)
     • When instantiating ‘f’, initially inferred to have
       this overly-general type:
         forall a. Eq a => a -> a -> Bool
       NB: This instantiation can be caused by the monomorphism
 restriction.
 }}}

 Notice the `NB: This instantiation can be caused by the monomorphism
 restriction` part. But in GHC 8.2.1, this advice has mysteriously
 vanished!

 {{{
 GHCi, version 8.2.1: http://www.haskell.org/ghc/  :? for help
 Loaded GHCi configuration from /home/rgscott/.ghci
 [1 of 1] Compiling Main             ( Bug.hs, interpreted )

 Bug.hs:1:5: error:
     • Ambiguous type variable ‘a0’ arising from a use of ‘==’
       prevents the constraint ‘(Eq a0)’ from being solved.
       Relevant bindings include
         f :: a0 -> a0 -> Bool (bound at Bug.hs:1:1)
       Probable fix: use a type annotation to specify what ‘a0’ should be.
       These potential instances exist:
         instance Eq Ordering -- Defined in ‘GHC.Classes’
         instance Eq Integer
           -- Defined in ‘integer-gmp-1.0.1.0:GHC.Integer.Type’
         instance Eq a => Eq (Maybe a) -- Defined in ‘GHC.Base’
         ...plus 22 others
         ...plus 9 instances involving out-of-scope types
         (use -fprint-potential-instances to see them all)
     • In the expression: (==)
       In an equation for ‘f’: f = (==)
   |
 1 | f = (==)
   |     ^^^^
 }}}

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


More information about the ghc-tickets mailing list