Have you profiled it? I wouldn't worry about recursion until I've seen the problem. I believe GHC defaults to infinite stack size.

Have you tried using hp2ps and/or looking at the code via threadscope?


On 06/19/2018 01:36 PM, Никита Фуфаев wrote:
Hello everyone

In C you can't implement main loop with recursion like
void mainLoop() {
  doSomething();
  mainLoop();
}  
because without optimisations stack will overflow.
In haskell it's common to write
mainLoop = doSomething >> mainLoop, and it doesn't leak memory because of haskell's evaluation model.
Does memory leak or argument stack overflow happen in this case?
mainLoop = doSomething >> mainLoop >> exit ExitSuccess
What about this case?
mainLoopModeA = do
  doSomething
  when condition mainLoopModeB
  mainLoopModeA
mainLoopModeB = do
  doSomethingElse
  when anotherCondition mainLoopModeA
  mainLoopModeB

or this case?
mainLoopModeA = do
  doSomething
  if condition
    then mainLoopModeB
    else mainLoopModeA
mainLoopModeB = do
  doSomethingElse
  if anotherCondition 
    then mainLoopModeA
    else mainLoopModeB

--
Nikita Fufaev


_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post.