[Haskell-cafe] Re: Getting my feet wet - not in Haskell though

Joachim Durchholz jo at durchholz.org
Sun Dec 24 09:20:48 EST 2006


Tomasz Zielonka schrieb:
> On Fri, Dec 22, 2006 at 06:16:03PM +0100, Joachim Durchholz wrote:
>> * Forcing the expressions that get written out means that I cannot use 
>> lazy evaluation freely. In particular, if some library code returns a 
>> data structure that contains a lazy-infinite subexpression, serializing 
>> it would not terminate, and I'd have little chance of fixing that.
> 
> I fear that you may not have a good intuition about laziness and how it
> is used in practical programming at this moment. Why not try and see if
> there really is a problem?

Because I might end up having sunk several weeks of my time, just to 
find that there is a problem anyway.

Second reason: the restriction will warp my design style. I'll avoid 
putting infinite data structures in the game data - and that means I 
can't explore open-end strategies, I'll have to "program around" the issue.
For this reason, I'd rather wait until Haskell serializes thunks as a 
matter of course, and explore lazy programming fully, rather than trying 
it out now and have my style warped.

>> Now that the first serialization will destroy many of the advantages of 
>> laziness, I don't think I should try to wrestle with its disadvantages.
> 
> A common problem with laziness is the possibility of introducing space
> leaks. That's when the program accumulates a big thunk which, if forced,
> would reduce to a small and simple value. "Nobody" is interested in this
> value now, so it is kept in a lazy, space inefficient form. A classic
> example is a thunk like this (1+1+1+1+1+1+...)
> 
> One solution to this problem is "deepSeq" - forcing full evaluation of a
> data structure. Naive serialisation performs this as a side-effect.
> 
> What I want to tell is that the "problem" you see here could just as well
> be a *solution* to a different problem that you haven't considered yet -
> space leaks!

I'm aware of this kind of problem.
However, hailing deepSeq as a solution before I even encounter the 
problem is just constraining the design space.
Besides, why use a lazy language at all if I can't use laziness anyway? 
Most of the data will be in the server, which will get serialized at 
some time.

>> I'll move on to the alternatives - Alice ML and/or Clean. Both can 
>> serialize without forcing lazy subexpressions.
> 
> I am pretty sure that with those solutions you will meet other problems
> of the same caliber.

No FUD, please ;-)

And yes I know there are devils lurking in every language and 
environment. I'm pretty sure that Haskell has a few others to offer, too.
(There's still no good introduction to Monads, for example. One that's 
understandable for a programmer who knows his Dijkstra well but no 
category theory. And a few other things.)

> What I propose is the following: keep Haskell as a possibility (with
> one discovered problem), consider problems with those other
> languages, then decide.

Exactly. The decision I made right now is just to explore another 
language. I'll be back and trying out Haskell after a while - though 
that probably won't before serialization didn't get serious.

> There doesn't seem to be a perfect programming language.
> 
>> This all said, I still don't think that Haskell or its execution 
>> environments are bad. They just don't fit my requirements, which are
>> A) I want to get my feet wet with an FPL (seriously, this time), and
>> B) I want to do a webserver application (I know the domain).
> 
> Haskell would play well with those requirements. I've created some web
> applications in it, and I was delighted with the things I learned in the
> process.
> 
> I am starting to suspect that you have a third requirement you haven't
> told us about, like: C) I want to make profit ;-)

I won't deny that profit is on the agenda, but it's taking a back seat 
during the evaluation phase.
The situation is slightly different: I'm sick of PHP and want to make 
profit with something better ;-)

However, I admit there are additional requirements, too. I just didn't 
want to add too much noise explaining why I chose exactly that project 
for exactly this language.

The real hidden agenda is that I'd like to have to option to move away 
from browser-based stuff, toward client-server stuff. The ability to 
serialize arbitrary data between applications would be almost 
indispensable - you can program around the restriction, but then you get 
impedance mismatches *between Haskell applications*.

Regards,
Jo



More information about the Haskell-Cafe mailing list