<div dir="auto">Shouldn't it be laws that "show" must be injective and "read" must be surjective? Without such laws, one could define:<div dir="auto"><br></div><div dir="auto">data Foo = Foo<br><div dir="auto">instance Show Foo where</div><div dir="auto">    show _ _ = id</div><div dir="auto">instance Read Foo where</div><div dir="auto">    readPrec = pfail</div><div dir="auto"><br></div><div dir="auto">which should be prevented.</div></div></div>