[GHC] #9206: OverloadedString breaks show?

GHC ghc-devs at haskell.org
Sun Jun 15 12:35:37 UTC 2014


#9206: OverloadedString breaks show?
------------------------------------+-------------------------------------
       Reporter:  j80JjBjVNRMajmA   |             Owner:
           Type:  bug               |            Status:  new
       Priority:  normal            |         Milestone:
      Component:  Compiler          |           Version:  7.8.2
       Keywords:                    |  Operating System:  Unknown/Multiple
   Architecture:  Unknown/Multiple  |   Type of failure:  None/Unknown
     Difficulty:  Unknown           |         Test Case:
     Blocked By:                    |          Blocking:
Related Tickets:                    |
------------------------------------+-------------------------------------
 The file `test.hs` contains


 {{{
 import GHC.Exts

 main  = putStrLn $ show (fromString "01")
 }}}

 and results in:

 `ghc -XNoOverloadedStrings test.hs`

 {{{
 overloadedString.hs:4:20:
     No instance for (Show a0) arising from a use of ‘show’
     The type variable ‘a0’ is ambiguous
     Note: there are several potential instances:
       instance Show Double -- Defined in ‘GHC.Float’
       instance Show Float -- Defined in ‘GHC.Float’
       instance (Integral a, Show a) => Show (GHC.Real.Ratio a)
         -- Defined in ‘GHC.Real’
       ...plus 44 others
     In the second argument of ‘($)’, namely ‘show (fromString "01")’
     In the expression: putStrLn $ show (fromString "01")
     In an equation for ‘main’: main = putStrLn $ show (fromString "01")

 overloadedString.hs:4:26:
     No instance for (IsString a0) arising from a use of ‘fromString’
     The type variable ‘a0’ is ambiguous
     Note: there is a potential instance available:
       instance IsString [Char] -- Defined in ‘Data.String’
     In the first argument of ‘show’, namely ‘(fromString "01")’
     In the second argument of ‘($)’, namely ‘show (fromString "01")’
     In the expression: putStrLn $ show (fromString "01")
 }}}

 OverloadedStrings breaks things (by making them magically work, which is
 probably why nobody complained?)

 `ghc -XOverloadedStrings -e main test.hs`

 {{{
 "01"
 }}}

 and another `test2.hs`:

 {{{
 import GHC.Exts

 instance IsString Double where
   fromString = read

 main  = putStrLn $ show (fromString "01")
 }}}

 `ghc -XOverloadedStrings -e main test2.hs`

 {{{
 "1.0"
 }}}

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


More information about the ghc-tickets mailing list