[Haskell-cafe] Lazy Lists and IO

Andrew Coppin andrewcoppin at btinternet.com
Wed Jul 11 15:02:48 EDT 2007


Stefan O'Rear wrote:
> Unfortunately, ignoring purity is fraught with peril.  One notable
> example recently is in HAppS, a Haskell web framework.  Alex Jacobson (a
> haskeller of significant note, not some "clueless newbie") accidentally
> wrote { length xs > 0 } instead of { not (null xs) } in some parsing
> code.  Which would just be inefficient, normally, but it demanded the
> whole thing, which as it happened was a lazy stream coming of a socket.
> Bad data dependencies, bang, deadlock.
>   

Ouch! That's gotta sting...

I wasn't aware that this function was so leathal. I use it constantly 
all the time...

> Option 2. Ignore lists
>
> It's possible to describe lists threaded with something else.
>
> data ListT m a = m (ListT' m a)
> data ListT' m a = NilT | ConsT a (ListT m a)
>
> You get your safety back ... and lose the standard list functions, list
> syntax, list comprehensions, list instances, strings-as-lists, et
> cetera.
>   

That's... interesting...

(I feel yet another "I'm going to have to sit down and think about that 
one" comming on.)



More information about the Haskell-Cafe mailing list