[Haskell-cafe] What causes <<loop>>?

Martin Hofmann martin.hofmann at uni-bamberg.de
Wed Dec 3 02:59:53 EST 2008


I've already posted this mail on haskell-cafe, but apparently the
subject suggested a too simple question, so I try it here again. I am
picking up a discussion with the same topic from haskell-users on
8th November. 

Thunks with reference on themselves was mentioned as main reason for
<<loop>>.

> A safe recursive definition would be
>   let x = Foo (x+1)
> However, if you leave out the constructor,
>   let x = x + 1
> you get a <<loop>> (or a deadlock).
> 

Are there any other reasons? 

I am trying to debug monadic code which stores state information in a
record maintaining several Data.Maps, but in vain so far. A state is
modified/changed in several steps by a compound function i.e.

	changeA $ changeB $ changeC state

Could this also lead to a deadlock? If so, can I prevent this using CPS?
If the state transformation is the main purpose/computation of the monad
at all, is it better to use CPS? Is code using mtl, records or Data.Map
more prone to <<loop>> or does this not matter at all. How can I
identify self-referencing thunks more easily? Is there any rule of thumb
to prevent <<loop>>? Are there any less obvious newbie mistakes causing
<<loop> then the one above?

Sorry, a lot of questions at once, but I am kind of helpless because I
can't find any reason of my <<loop>>, so any comments, experience, and
tips are highly appreciated.

Thanks,

Martin



More information about the Haskell-Cafe mailing list