packages feed

prob-fx-0.1.0.2: examples/Main.hs

{-# LANGUAGE AllowAmbiguousTypes, PolyKinds #-}
{-# LANGUAGE DataKinds #-}

module Main where

import LinRegr ( simulateLinRegr, inferLwLinRegr, inferMhLinRegr )
import LogRegr ( simulateLogRegr, inferLwLogRegr, inferMHLogRegr )
import SIR ( simulateSIR, inferSIR, simulateSIRS, simulateSIRSV )
import LDA ( simLDA, mhLDA )
import Radon ( simRadon, mhRadon )
import School ( mhSchool )
import Sampler ( sampleIO )
import System.Environment (getArgs)

printThenWrite :: Show a => a -> IO ()
printThenWrite a = print a >> writeFile "model-output.txt" (show a)

availableCommands = "[simLinRegr, lwLinRegr, mhLinRegr, simSIR, simSIRS, simSIRSV, mhSIR, simLogRegr, lwLogRegr, mhLogRegr, simLDA, mhLDA, simRadon, mhRadon, mhSchool]"

parseArgs :: String -> IO ()
parseArgs cmd = case cmd of
  "simLinRegr"  -> sampleIO simulateLinRegr >>= printThenWrite
  "lwLinRegr"   -> sampleIO inferLwLinRegr >>= printThenWrite
  "simSIR"      -> sampleIO simulateSIR >>= printThenWrite
  "simSIRS"     -> sampleIO simulateSIRS >>= printThenWrite
  "simSIRSV"    -> sampleIO simulateSIRSV >>= printThenWrite
  "mhSIR"       -> sampleIO inferSIR >>= printThenWrite

  "mhLinRegr"   -> sampleIO inferMhLinRegr >>= printThenWrite
  "simLogRegr"  -> sampleIO simulateLogRegr >>= printThenWrite
  "lwLogRegr"   -> sampleIO inferLwLogRegr >>= printThenWrite
  "mhLogRegr"   -> sampleIO inferMHLogRegr >>= printThenWrite
  "simLDA"      -> sampleIO simLDA >>= printThenWrite
  "mhLDA"       -> sampleIO mhLDA >>= printThenWrite
  "simRadon"    -> sampleIO simRadon >>= printThenWrite
  "mhRadon"     -> sampleIO mhRadon >>= printThenWrite
  "mhSchool"    -> sampleIO mhSchool >>= printThenWrite
  _             -> putStrLn $ "unrecognised command: " ++ cmd ++ "\n"
                           ++ "available commands: " ++ availableCommands

main :: IO ()
main = do
  args <- getArgs
  case args of []      -> print $ "no arguments provided to ProbFX. Available arguments: " ++ availableCommands
               (a:as)  -> parseArgs a