Re[2]: The future of Haskell discussion
hw
hw <hw@ksue.kharkov.ukrtel.net>
Tue, 18 Sep 2001 10:23:43 +0300
Hello Yoann,
Monday, September 17, 2001, 7:12:42 PM, you wrote:
>> In the case of the Draw monad (which is identical to the
>> IO monad except that it carries a "device context" around as an
[skip]
>> setPicture window (withColor blue (withFont helvetica (text "Hello World")))
YP> you can achieve the same in many langage such as c++.
YP> I dont really see what is haskell specific in your code.
YP> pseudo code (i dont remember exactly c++ :) ):
You made some mistakes here. ^^^^^^^^^^^^^^^
YP> class Draw {
YP> Color color;
YP> Font font;
YP> Widget wid;
YP> Draw(Widget w) { wid = w }
YP> draw(window) { Color old; Font old;
YP> oldc = setColor color; oldf = setFont font;
YP> wid.draw(window);
YP> setColor oldc; setFont oldf;
YP> }
YP> withColor (Color c) {color = c}
You should always return references to 'this' in every method, which may
be used during "glued" calls, so:
Draw& withColor (Color c) {color = c; return *this;}
Draw& withFont (Font f) {font = f; return *this;}
It was one of the sources of resistance by B.Stroustrup to include "named"
parameters in function calls, for ex: withColor(c=blue) And the
technique shown was similar with mentioned above. I think that this is
a bit pervertive.
YP> new Draw(new textWidget("Hello World"))->withColor(blue)->withFont("helvetica")->draw(window)
YP> there are plenty of way to achieve what you do.
I just clarified some moments in shown C++ example. Not more.
--
Best regards,
hw mailto:hw@ksue.kharkov.ukrtel.net