Read1/Read2 don't have methods defined in terms of ReadPrec
Original Haskell libraries mailing list discussion: https://mail.haskell.org/pipermail/libraries/2016-June/027102.html
GHC 8.0 added the Data.Functor.Classes module to
base, and with it theRead1andRead2typeclasses. The current definition ofRead1is this:class Read1 f where liftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (f a) liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [f a]There's a pretty big problem with this definition: it uses
ReadS(a synonym forString -> [(a, String)]). This sort of parser is very slow (the docs even admit as such), and moreover, the actualReadtypeclass on which Read1 is based tries to avoid using it whenever possible.The
Readtypeclass has this definition currently:class Read a where readsPrec :: Int -> ReadS a readList :: ReadS [a] readPrec :: ReadPrec a readListPrec :: ReadPrec [a]Where
ReadPrecis a much more efficient parser datatype. When derivingReadinstances, GHC defines them in terms ofreadPrec, and gives the other methods default definitions that leveragereadPrec.For the sake of consistency, I propose adding analogous methods to
Read1andRead2that use theReadPrecdatatype. For example, here is how I would changeRead1:class Read1 f where liftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (f a) liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [f a] liftReadPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec (f a) liftReadListPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec [f a]And similarly for
Read2. Here is a full gist with a sketch of what the newRead1/Read2definitions would look like, including what the default definitions of the other methods would be.
Diff coming soon.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.0.1 |
| Type | FeatureRequest |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | libraries/base |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |