{-# LANGUAGE TemplateHaskell #-} import Control.Concurrent (threadDelay) import Control.Monad (forever) import Data.Function ((&)) import Effectful (liftIO, runEff) import Hsm.Battery (readBatteryState, runBattery) import Hsm.Core.App (bootstrapApp) import Hsm.Log (Severity (Info), logMsg, runLogsOpt) import Hsm.Log.Options (makeLoggerOptionParser) -- Import full module for cleaner `-ddump-splices` output -- Avoids package/module qualifiers in generated code import Options.Applicative type Logs = '["battery"] $(makeLoggerOptionParser @Logs "Options" "parser" 'Info) main :: IO () main = bootstrapApp parser "Launch Battery Monitoring Test Application" $ \opts -> (forever $ liftIO (threadDelay 1000000) >> readBatteryState >>= logMsg Info . show) & runBattery & runLogsOpt @Options @Logs opts & runEff