<br><br><div class="gmail_quote">2012/1/8 Gábor Lehel <span dir="ltr">&lt;<a href="mailto:illissius@gmail.com">illissius@gmail.com</a>&gt;</span><br><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
The second is that only the author of the datatype could put functions<br>
into its namespace; the &#39;data.foo&#39; notation would only be available<br>
for functions written by the datatype&#39;s author, while for every other<br>
function you would have to use &#39;foo data&#39;. I dislike this special<br>
treatment in OO languages and I dislike it here.<br></blockquote><div><br></div><div>Please allow me to clarify as far as Frege is concerned.</div><div>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:</div>
<div><br></div><div>module RExtension where</div><div><br></div><div>import original.M(R)    -- access the R record defined in module original.M</div><div><br></div><div>class Rextension1 r where</div><div>      firstNewFunction :: .....</div>
<div>      secondNewFunction :: .....</div><div><br></div><div>instance Rextension1 R where</div><div>     -- implementation for new functions</div><div><br></div><div>And now, in another module one could</div><div><br></div>
<div>import RExtension()      -- equivalent to qualified import in Haskell</div><div><br></div><div>and, voilá, the new functions are accessible (only) through R</div><div><br></div><div><br></div><div>-- </div></div>Mit freundlichen Grüßen<br>
Ingo<br>