
#10067: The Read Integer instance is too slow -------------------------------------+------------------------------------- Reporter: redneb | Owner: Type: feature request | Status: patch Priority: high | Milestone: 7.10.1 Component: Core Libraries | Version: 7.11 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Runtime | Unknown/Multiple performance bug | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: Phab:D645 -------------------------------------+------------------------------------- Comment (by redneb): So let me explain what the problem is. My patch modifies the module `Text.Read.Lex`. This module defines among other thinks a `ReadP` parser that is used to implement the `Read` instances of all integral types. The actual instances though, are given in `GHC.Read` (except for `Natural` of course). My patch works by providing an optimized version of an ''internal'' function of `Text.Read.Lex`. If we also want to provide a version of that function for `Natural`, then we need to import `GHC.Natural`. But this creates multiple import cycles, exactly because that module was designed to be a leaf module. Namely, all of the following imports of `GHC.Natural` are problematic: `GHC.Read`, `Data.Data`, `GHC.Exception`, `Data.Int`, and `Data.Word`. So now we have 3 options: 1. Use my patch as it is, without the `Natural` specialization. Remeber that the `Read Natural` instance relies on the `Read Integer` instance and it will benefit too from my patch. 1. Use a simple hs-boot file for `GHC.Natural`. 1. Break the cycle by moving stuff out of `GHC.Natural`. This requires extensive changes (just look at the list of offending imports above) and honestly, my patch is not the only thing in `base` that does not treat `Natural` as an equal to `Integer` right now; for example the `Show Integer` has an ad-hoc implementation that has not been extended for `Natural` (instead `Show Natural` relies on `Show Integer` again). Given all of the above, I think 2 is the best option here. I really don't like hs-boot files, but I do think that the way `Natural`s have been implemented and possible large scale changes to that, is largely unrelated to my patch and should be discussed separately. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10067#comment:10 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler