Skip to content
  • Ryan Scott's avatar
    Make the Read instance for Proxy (and friends) ignore precedence · 8fd95999
    Ryan Scott authored
    Summary:
    The `Read` instance for `Proxy`, as well as a handful of other data
    types in `base` which only have a single constructor, are doing something
    skeevy: they're requiring that they be surrounded by parentheses if the parsing
    precedence is sufficiently high. This means that `"Thing (Proxy)"` would parse,
    but not `"Thing Proxy"`. But the latter really ought to parse, since there's no
    need to surround a single constructor with parentheses. Indeed, that's the
    output of `show (Thing Proxy)`, so the current `Read` instance for `Proxy`
    violates `read . show = id`.
    
    The simple solution is to change `readParen (d > 10)` to `readParen False` in
    the `Read` instance for `Proxy`. But given that a derived `Read` instance would
    essentially accomplish the same thing, but with even fewer characters, I've
    opted to just replace the hand-rolled `Read` instance with a derived one.
    
    Test Plan: make test TEST=T12874
    
    Reviewers: ekmett, austin, hvr, goldfire, bgamari
    
    Reviewed By: bgamari
    
    Subscribers: rwbarton, thomie
    
    GHC Trac Issues: #12874
    
    Differential Revision: https://phabricator.haskell.org/D3871
    8fd95999