packages feed

ascii-progress-0.3.0.0: bin/CrazyMultiExample.hs

import           Control.Concurrent           (forkIO, threadDelay)
import           Control.Concurrent.Async     (wait)
import           Control.Monad                (forM, unless)
import           System.Console.AsciiProgress
import           System.Random                (randomRIO)

main :: IO ()
main = displayConsoleRegions $ do
    fs <- forM ([0..100] :: [Int]) $ \i -> do
        pg <- newProgressBar def { pgWidth = 100
                                 , pgFormat = "pg " ++ show i ++ " " ++ (pgFormat def)
                                 , pgOnCompletion = Just $ "pg " ++ show i ++ " is Done!"
                                 }
        speed <- (* 100000) <$> randomRIO (3, 10)
        threadDelay 50000
        _ <- forkIO $ loop pg speed
        return $ pgFuture pg
    waitAll fs
  where
    waitAll [] = return ()
    waitAll (f:fs) = wait f >> waitAll fs
    loop pg ts = do
        b <- isComplete pg
        unless b $ do
            threadDelay ts
            tick pg
            loop pg ts