On 29 October 2010 23:28, Uwe Schmidt <[email protected]> wrote: > Dear Haskellers, > > I've a question about type class design. When > developing the set of functions for a class, there > are often two or more functions, let's say f and g, > where the semantics of g can be expressed by f. > > When writing down the code, there are two choices > for g. First g is included in the type class, second > g is defined outside and the signature has a context > referencing the class. > > 1. case > > class Foo a where > f :: ... a ... > g :: ... a ... > g = expr[f] > > 2. case > > class Foo a where > f :: ... a ... > > g :: Foo a => ... a ... > g = expr[f] > > [snip] > > My argument for 2.: > > c) Correctness: The semantics for g are fix (relative to f), > All laws for g hold everywhere, assuming f is implemented > correctly.
Another possible argument: large type classes can look daunting for both implementors and users, even if only one or two methods need to be defined for a minimal instantiation (I'm tring to work out what to do here myself, as I have some typeclasses that for efficiency reasons it might be nice to have more methods in the class, but it makes it a little overwhelming). -- Ivan Lazar Miljenovic [email protected] IvanMiljenovic.wordpress.com _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
