[Haskell-cafe] Newbie Q: Deriving MyOrd from Eq problem

Ralf Lammel Ralf.Lammel at microsoft.com
Tue Jul 25 13:59:58 EDT 2006


Bulat,

Dmitri is not necessarily "mixing [...] class and its (default)
instance".
Bulat, one could suspect a reasonable use of default class methods:
http://www.haskell.org/onlinereport/decls.html#overloading
Indeed, Dmitri's declarations make sense as default class methods.
... except for Jared's observation: the attempt to rely on Ord.
If %< in place of < was used on the RHSs, then this would really look
like default methods.

Ralf

PS: We don't want to send people using overlapping instances more often
than necessary :-)

> -----Original Message-----
> From: haskell-cafe-bounces at haskell.org [mailto:haskell-cafe-
> bounces at haskell.org] On Behalf Of Bulat Ziganshin
> Sent: Tuesday, July 25, 2006 9:46 AM
> To: Dmitri O.Kondratiev
> Cc: haskell-cafe at haskell.org
> Subject: Re: [Haskell-cafe] Newbie Q: Deriving MyOrd from Eq problem
> 
> Hello Dmitri,
> 
> Tuesday, July 25, 2006, 8:15:41 PM, you wrote:
> 
> > class Eq a => MyOrd a where
> >         (%<=), (%>), (%>=) :: a -> a -> Bool
> >         x %<= y = (x < y || x == y)
> >         x %> y =  y < x
> >         x %>= y = (y < x || x == y)
> 
> you are mixing definition of class and its (default) instance. try the
> following:
> 
> class Eq a => MyOrd a where
>         (%<=), (%>), (%>=) :: a -> a -> Bool
> 
> instance Ord a => MyOrd a where
>         x %<= y = (x < y || x == y)
>         x %> y =  y < x
>         x %>= y = (y < x || x == y)
> 
> although i don't think it is what you want. actually Haskell don't
> have a good way to define default instance for some subclass, although
> there are some proposals how this can be addressed. you should
> either define exactly one instance for all "Ord"ed types or duplicate
> this trivial definition in every instance. in GHC you also has an
> option to use "overlapping" instances but this can work only if all
> your other "instance" definitions don't use deriving from typeclasses.
> i.e. the following is prohibited:
> 
> class Eq a => MyOrd a where ...
> instance Ord a => MyOrd a where ...
> instance SomeClass a => MyOrd a where ...
> 
> and even if you will be accurate, i'm not sure that "overlapping" will
> work properly
> 
> ps: you can ask me in Russian via private mail
> 
> --
> Best regards,
>  Bulat                            mailto:Bulat.Ziganshin at gmail.com
> 
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe


More information about the Haskell-Cafe mailing list