{-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE ImportQualifiedPost #-} import Control.Applicative (Applicative (..)) import Control.Monad.Bayes.Sampler.Strict import Data.Time (diffUTCTime, getCurrentTime) import Helper import Options.Applicative ( ParserInfo, auto, execParser, fullDesc, help, info, long, maybeReader, option, short, ) -- Prelude exports liftA2 from GHC 9.6 on, see https://github.com/haskell/core-libraries-committee/blob/main/guides/export-lifta2-prelude.md -- import Control.Applicative further up can be removed once we don't support GHC <= 9.4 anymore import Prelude hiding (Applicative (..)) infer :: Model -> Alg -> IO () infer model alg = do x <- sampleIOfixed (runAlg model alg) print x opts :: ParserInfo (Model, Alg) opts = flip info fullDesc $ liftA2 (,) model alg where model = option (maybeReader parseModel) ( long "model" <> short 'm' <> help "Model" ) alg = option auto ( long "alg" <> short 'a' <> help "Inference algorithm" ) main :: IO () main = do (model, alg) <- execParser opts startTime <- getCurrentTime infer model alg endTime <- getCurrentTime print (diffUTCTime endTime startTime)