2012/1/8 Gábor Lehel <illissius@gmail.com>
 
The second is that only the author of the datatype could put functions
into its namespace; the 'data.foo' notation would only be available
for functions written by the datatype's author, while for every other
function you would have to use 'foo data'. I dislike this special
treatment in OO languages and I dislike it here.

Please allow me to clarify as far as Frege is concerned.
In Frege, this is not so, because implementations of class functions in an instance will be linked back to the  instantiated types name space. Hence one could do the following:

module RExtension where

import original.M(R)    -- access the R record defined in module original.M

class Rextension1 r where
      firstNewFunction :: .....
      secondNewFunction :: .....

instance Rextension1 R where
     -- implementation for new functions

And now, in another module one could

import RExtension()      -- equivalent to qualified import in Haskell

and, voilá, the new functions are accessible (only) through R


-- 
Mit freundlichen Grüßen
Ingo