Read/Show Incompatibility in base
I just stumbled across a situation where the deriving machinery, in combination with types provided by base, produces Show/Read instances that are incompatible. Here is a minimal example:
import Data.Proxy main :: IO () main = do x <- readLn print (x :: Thing (Proxy Int)) data Thing a = Thing a deriving (Read,Show)
If you run this program and type "Thing Proxy" into standard in, you get a parse error. If you type in "Thing (Proxy)", it works fine. Calling
Thing Proxy gives the string "Thing Proxy" though. So,
read . show =/= id in this case. This might just be an issue with
Proxy's Read instance, but I'm not really sure.