
--- Sven Panne
* It's a bit strange that a class with a "get" method is called "Readable". "HasGetter" or "Gettable" would look more consistent to me, but I'm not a native speaker.
I just follow definitions given from Daan: --- Daan Leijen wrote:
Furthermore, you can still make a read/write distinction by putting "get" and ":=" in classes as you do:
class Readable attr where get :: attr w a -> w -> IO a class Writable attr where (=:) :: attr w a -> a -> Prop w
But maybe you are right HasGetter and HasSetter are more adequate names. I don't have any preferences about names.
* A list version of (=:) is missing (called "set" in GIO/HOpenGL). But even its type wouldn't be clear to me given this general version of (=:). Hmmm...
With new implementation the HOpenGL's set function is just well known sequence_ function from the standard prelude. The GIO's set function correspond to setp function from the Attr module.
That was my intention. We should probably move this thread to the libraries list and continue discussion there (e.g. naming, where should the classes and instances reside in the module hierarchy, etc.).
Well! I expect future discussion in the libraries@haskell.org. I propose to extract the type classes in the new module (maybe Control.Monad.Attributes) and after that to add attribute types along with their instances to modules which defines corresponding monads.
Krasimir: Do you want to propose your Attr module there (without the GIO/HOpenGL stuff, of course)? It's your baby, after all...
Of course. The attributes can be used in much more places than in GIO and HOpenGL. The good example is HToolkit Draw monad. There are many functions like (get/set)PenColor, (get/set)PenSize which can be replaced with attributes of type PenAttr. Cheers, Krasimir __________________________________________________ Do you Yahoo!? Yahoo! Shopping - Send Flowers for Valentine's Day http://shopping.yahoo.com