[Haskell-cafe] Strictness leak

Emil Axelsson emax at cs.chalmers.se
Tue Oct 30 15:40:39 EDT 2007


You mean for the IO monad, right?

   take 10 $ execWriter $ sequence $ repeat $ tell ([3]::[Int])

/ Emil



On 10/30/2007 02:04 PM, Jeff Polakow wrote:
> 
> Hello,
> 
>  > > countIO :: String -> String -> Int -> [a] -> IO [a]
>  > > countIO msg post step xs = sequence $ map unsafeInterleaveIO
>  > ((blank >> outmsg (0::Int) >> c):cs)
>  > >    where (c:cs) = ct 0 xs
>  > >          output   = hPutStr stderr
>  > >          blank    = output ('\r':take 70 (repeat ' '))
>  > >          outmsg x = output ('\r':msg++show x) >> hFlush stderr
>  > >          ct s ys = let (a,b) = splitAt (step-1) ys
>  > >                        next  = s+step
>  > >                    in case b of [b1] -> map return a ++ [outmsg
>  > (s+step) >> hPutStr stderr post >> return b1]
>  > >                                 []   -> map return (init a) ++
>  > [outmsg (s+length a) >> hPutStr stderr post >> return (last a)]
>  > >                                 _ -> map return a ++ [outmsg s >>
>  > return (head b)] ++ ct next (tail b)
>  >
>  > It wraps a list with IO operations, so that progress can be reported
>  > while evaluating the list elements.  Unfortunately, there seems to be
>  > a "stricness leak" here - and consequently, it does not work on an
>  > infinite list.
>  >
> Besides anything else, sequence will diverge on an infinite list. This 
> can be seen directly from the type:
> 
>     sequence :: Monad m => [m a] -> m [a]
> 
> It is necessary to compute all of the computations in the list before 
> returning any of the pure resulting list.
> 
> -Jeff
> 
> ---
> 
> This e-mail may contain confidential and/or privileged information. If you
> are not the intended recipient (or have received this e-mail in error)
> please notify the sender immediately and destroy this e-mail. Any
> unauthorized copying, disclosure or distribution of the material in this
> e-mail is strictly forbidden.
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe


More information about the Haskell-Cafe mailing list