George Russell wrote:

> This isn't a bug, just a suggestion.  It's not even a very important
> suggestion, but one that might be worth implementing if it's easy and you can
> find the the time.  Or perhaps I am just doing things the wrong way?
>
> The point is that I sometimes have something like the following situation
>
> class ComplicatedClass x where
>    simpleTitleFn :: x -> String
>    muchMoreComplicatedTitleFn :: extra arguments -> x -> IO (WithError (Source blah 
>blah blah String)
>
>    muchMoreComplicatedTitleFn _ x = [ ... some expression involving simpleTitleFn 
>...]
>
> The idea is that only muchMoreComplicatedTitleFn must always work; however instances 
>may
> choose to implement it directly, or implement the much simpler function simpleTitleFn
> (if that does all they want).
>
> At the moment the situation is that someone who defines just 
>"muchMoreComplicatedTitleFn"
> will get an unnecessary warning message from the compiler about "No explicit method 
>or
> default method for simpleTitleFn".  I suggest instead introducing a new class of
> optional method (for example, via a pragma {-# OPTIONAL_METHOD simpleTitleFn #-}) 
>which
> compiles exactly as normal except that (1) no warning is given for instances which 
>don't
> define it; (2) a warning is given whenever anyone outside the class declaration 
>*uses*
> simpleTitleFn.

This seems to be a lot of mechanism for questionable benefit.  A simpler and cleaner 
approach, IMHO, is
the following:

class ComplicatedClass x where
   complicatedTitleFn :: extra arguments -> x -> IO (WithError (Source blah blah blah 
String)

makeComplicatedTitleFn :: (x -> String) -> extra arguments -> x -> IO (WithError 
(Source blah blah blah
String)
makeComplicatedTitleFn simpleTitleFn = [ ... some expression involving simpleTitleFn 
...]

Each instance either defines complicatedTitleFn directly, or uses 
makeComplicatedTitleFn with a simple
title function:

instance ComplicatedClass Foo where
   complicatedTitleFn = makeComplicatedTitleFn simpleFooTitleFn

simpleFooTitleFn = ...

Dean

_______________________________________________
Glasgow-haskell-users mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to