ReadPはdata宣言じゃなくてnewtype宣言だから、
記述上は包まれた形になってるけど、実装では包みが外れた形になる。

参照: http://haskell.g.hatena.ne.jp/jmk/20061203/1165141002

Pは直接的にはうまく束ねることができないから、一旦仮想的なReadPで束ねてるって感じ?