From c48c006b0bfb0b786d203658b99ca3f13fd76b98 Mon Sep 17 00:00:00 2001 From: Maxim Likhachev Date: Sat, 20 Jun 2020 16:41:00 +0300 Subject: [PATCH] 008/104: sleep --- src/sleep.hs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/sleep.hs diff --git a/src/sleep.hs b/src/sleep.hs new file mode 100644 index 0000000..fdd6d26 --- /dev/null +++ b/src/sleep.hs @@ -0,0 +1,23 @@ +{-# LANGUAGE NoImplicitPrelude #-} + +import Prelude (Int, IO, Maybe (Just, Nothing), String, + (.), (*), (++), + compare, flip, mapM_, putStrLn) +import Control.Concurrent (threadDelay) +import Control.Monad ((>>=), (>>)) +import Data.List (sortBy) +import System.Environment (getArgs) +import System.Exit (exitFailure) +import Text.Read (readMaybe) + +microseconds :: Int +microseconds = 1000000 + +sleep :: String -> IO () +sleep time = wait (readMaybe time) + where wait Nothing = putStrLn ("sleep: invalid time interval ‘" ++ time ++ "’") >> exitFailure + wait (Just n) = threadDelay (n * microseconds) + +main :: IO () +main = getArgs >>= mapM_ sleep . sortBy (flip compare) -- sort args to handle non-integer values firstly +