On Wed, Oct 2, 2013 at 4:17 PM, Tom Ellis < tom-lists-haskell-cafe-2...@jaguarpaw.co.uk> wrote:
> What's the benefit of this requirement, as opposed to, for example > > False <= _ = True > I was trying to cover for void types, where the only sensible definitions are instance Eq Void where _ == _ = error "void (==)" instance Ord Void where _ <= _ = error "void (<=)" This is because reflexivity must be guaranteed, so undefined == undefined may not yield False, but I doubt error "foo" == (let x = x in x) should yield True either. But perhaps this exception deserves its own rule. On Wed, Oct 2, 2013 at 5:36 PM, Roman Cheplyaka <r...@ro-che.info> wrote: > * Stijn van Drongelen <rhym...@gmail.com> [2013-10-02 15:46:42+0200] > > I do think something has to be done to have an Eq and Ord with more > strict > > laws. > > > > * Operators in Eq and Ord diverge iff any of their parameters are bottom. > > This outlaws the Eq instances of lists, trees, and other (co)recursive > types. > > Furthermore, in this formulation, even Eq for tuples is illegal, because > > (undefined, something) == somethingElse > > is going to diverge. > > Roman > I knew this was going to bite me in the ass. Let me try again: * Operators in Eq and Ord may only diverge when any of their parameters are bottom.
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe