Dear All,

The following program results in a stack overflow. My intuition says that
lazy evaluation should allow us to make it work. How do we need to change
System.IO to make it work?

    module Main

    import System.IO
    import Control.Monad
    import Data.List

    doPrintAll :: [String] -> IO ()
    doPrintAll strings = mapM_ putStr strings

    output :: [String]
    output = take 1000000 (repeat "")

    Start world = execIO (doPrintAll output) world

The following program works. Somehow using System.IO should result in
equivalent behaviour.

    module Main

    import StdEnv
    import Data.List

    printAll :: [String] *World -> *((), !*World)
    printAll [] world = ((), world)
    printAll [str:strings] world
      # (out, world) = stdio world
      # out          = fwrites str out
      # (_, world)   = fclose out world
      = printAll strings world

    output :: [String]
    output = take 1000000 (repeat "")

    Start world = printAll output world

Best regards,
Markus
_______________________________________________
clean-list mailing list
clean-list@science.ru.nl
https://mailman.science.ru.nl/mailman/listinfo/clean-list

Reply via email to