module ParkBench.Internal.Config ( Config (..), getFromEnv, ) where import ParkBench.Internal.Prelude import System.Environment import Text.Read (readMaybe) data Config = Config { Config -> Rational runlen :: Rational } getFromEnv :: IO Config getFromEnv :: IO Config getFromEnv = do Maybe Double maybeRunlen <- String -> IO (Maybe Double) lookupDoubleEnv String "PARK_BENCH_RUNLEN" forall (f :: * -> *) a. Applicative f => a -> f a pure Config { $sel:runlen:Config :: Rational runlen = case Maybe Double maybeRunlen of Maybe Double Nothing -> Rational 100_000_000 Just Double runlen -> Double -> Rational doubleToRational Double runlen forall a. Num a => a -> a -> a * Rational 1_000_000_000 } lookupDoubleEnv :: String -> IO (Maybe Double) lookupDoubleEnv :: String -> IO (Maybe Double) lookupDoubleEnv String name = do Maybe String val <- String -> IO (Maybe String) lookupEnv String name forall (f :: * -> *) a. Applicative f => a -> f a pure (Maybe String val forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= forall a. Read a => String -> Maybe a readMaybe)