As someone suggested me, I can read the logs from Writer and WriterT
as computation goes by,
if the monoid for the Writer  is lazy readable.
This has been true until I tried to put the IO inside WriterT

> {-# LANGUAGE FlexibleContexts #-}
> import Control.Monad.Writer

> k :: (MonadWriter [Int] m) => m [Int]
> k = let f x = tell [x] >> f (x + 1) in f 0

> works :: [Int]
> works = snd $ runWriter k

> hangs :: IO [Int]
> hangs = snd `liftM` runWriterT k

> main = take 20 `liftM` hangs >>= print


The main hangs both interpreted and compiled on ghc 6.10.1.

The issue is not exposing with IO alone as

main = print "test" >> main

is a working program.

Thanks for explanations.

paolino
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to