
#9206: OverloadedStrings breaks show? -------------------------------------+------------------------------------ Reporter: j80JjBjVNRMajmA | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.8.2 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Unknown/Multiple Type of failure: None/Unknown | Difficulty: Unknown Test Case: | Blocked By: Blocking: | Related Tickets: -------------------------------------+------------------------------------ Comment (by simonpj): This behaviour is mostly documented in the [http://www.haskell.org/ghc/docs/latest/html/users_guide/type-class- extensions.html#overloaded-strings overloaded strings section of the user manual], although there is an important omission: with `-XOverloadedStrings`, the default types (if none are specified by the user) are `Integer, Double, String`, not just `Integer, Double`. Reminder: `fromString :: IsString a => String -> a`, exported by `GHC.Exts`. So * Without `-XOverloadedStrings`, `test.hs` is rightly rejected. * With `-XOverloadedStrings`, defaulting kicks into play and chooses the first type from `Integer, Double, String` that satisfies `(Show a0, IsString a0)`. The only satisfying type is `String` so that is chosen. * In `test2.hs`, `Double` is made an instance of `IsString`, so that is picked first, before `String`. So it all looks right except that the user manual is deficient. I'll fix that. Of course, you could argue that the specification is wrong. If you want to do that, we should go back to the original discussion threads on overloaded strings. Simon -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9206#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler