
This has come up a few times and been written by many Haskellers I was quite certain of that, hence my puzzlement at being unable to find it =)
What kind of axioms should an instance of this class satisfy? There are quite a few obvious ones, but I'm not sure it's particularly necessary. I'm still curious, though. In general I think it's a GoodThing (TM) if stuff (especially the sort of typeclasses) come with a semantic base we can use for reasoning about it; in the sort of way the Monad class comes with the monad laws.
The issue here is a type one, not a semantics one. An issue nevertheless, IMHO
I believe the only way to purely get such an interface (in current Haskell) is to use unsafeCoerce. I'm not so sure about calling unsafeCoerce 'pure' ;)
-- Ariel