[GHC] #14782: typeclass polymorphism defeats bang patterns

GHC ghc-devs at haskell.org
Thu Feb 15 18:50:13 UTC 2018


#14782: typeclass polymorphism defeats bang patterns
-------------------------------------+-------------------------------------
        Reporter:  dmwit             |                Owner:  (none)
            Type:  bug               |               Status:  closed
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  8.2.2
      Resolution:  invalid           |             Keywords:
                                     |  MonomorphismRestriction
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 dmwit):

 Okay, I think I understand your explanation. But the more I think about
 this, the more it seems like there is still something a bit off in the
 current implementation. Here's an almost identical example, but with
 `Monoid` instead of `Num` to avoid having to think about defaulting:

 {{{
     {-# LANGUAGE BangPatterns #-}
     main = let n :: Monoid a => a; !n = undefined in return ()
 }}}

 Now that I have thought more carefully about what this means, I no longer
 understand why this is allowed to pass the type checker. If I'm following
 what you're saying, it seems like it ought to be an ambiguous type error,
 for exactly the same reason `main = seq (undefined :: Monoid a => a)
 (return ())` is.

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


More information about the ghc-tickets mailing list