content: module Unused.CLI.ProgressIndicator
      ( I.ProgressIndicator
      , createProgressBar
      , createSpinner
      , progressWithIndicator
      ) where
  
  import qualified Control.Concurrent.ParallelIO as PIO
  import qualified Unused.CLI.ProgressIndicator.Internal as I
  import qualified Unused.CLI.ProgressIndicator.Types as I
  import           Unused.CLI.Util (Color(..), installChildInterruptHandler)
  
  createProgressBar :: I.ProgressIndicator
  createProgressBar = I.ProgressBar Nothing Nothing
  
  createSpinner :: I.ProgressIndicator
  createSpinner =
      I.Spinner snapshots (length snapshots) 75000 colors Nothing
    where
      snapshots = ["⣾", "⣽", "⣻", "⢿", "⡿", "⣟", "⣯", "⣷"]
      colors = cycle [Black, Red, Yellow, Green, Blue, Cyan, Magenta]
  
  progressWithIndicator :: Monoid b => (a -> IO b) -> I.ProgressIndicator -> [a] -> IO b
  progressWithIndicator f i terms = do
      I.printPrefix i
      (tid, indicator) <- I.start i $ length terms
      installChildInterruptHandler tid
      mconcat <$> PIO.parallel (ioOps indicator) <* I.stop indicator
    where
      ioOps i' = map (\t -> f t <* I.increment i') terms
  