estreps-0.3: src/Util.hs
module Util where
import System.IO
import System.IO.Unsafe
countIO :: Int -> String -> [a] -> IO [a]
countIO step msg xs = sequence $ map unsafeInterleaveIO $ ct 0 xs
where ct s xs' = let (a,b) = splitAt (step-1) xs'
next = s+step
output c = hPutStr stderr ((take (length (show c)+2+length msg) $ repeat ' ')++'\r':msg++show c) >> hFlush stderr
in if null b then map return a ++ []
else map return a ++ [output next >> return (head b)]
++ ct next (tail b)