hgeometry-0.6.0.0: examples/Main.hs
module Main where
import Data.Monoid
import Control.Applicative
import Options.Applicative
import Data.Data
--------------------------------------------------------------------------------
import qualified Demo.DrawGPX as DrawGPX
import qualified Demo.WriteEnsemble as EnsembleWriter
import qualified Demo.MinDisk as MinDisk
import qualified Demo.Delaunay as Delaunay
import qualified Demo.ExpectedPairwiseDistance as ExpPWD
--------------------------------------------------------------------------------
data Options = BAPC BAPCOptions
| DrawGPX DrawGPX.Options
| EnsembleWriter EnsembleWriter.Options
| MinDisk MinDisk.Options
| Delaunay Delaunay.Options
| ExpectedPairwiseDistance ExpPWD.Options
deriving Data
parser :: Parser Options
parser = subparser (
command' DrawGPX DrawGPX.options
<> command' EnsembleWriter EnsembleWriter.options
<> command' MinDisk MinDisk.options
<> command' Delaunay Delaunay.options
<> command' ExpectedPairwiseDistance ExpPWD.options
)
mainWith :: Options -> IO ()
mainWith opts' = case opts' of
BAPC _ -> putStrLn "not yet"
DrawGPX opts -> DrawGPX.mainWith opts
EnsembleWriter opts -> EnsembleWriter.mainWith opts
MinDisk opts -> MinDisk.mainWith opts
Delaunay opts -> Delaunay.mainWith opts
ExpectedPairwiseDistance opts -> ExpPWD.mainWith opts
--------------------------------------------------------------------------------
options :: ParserInfo Options
options = info (helper <*> parser)
( progDesc "Example programs for HGeometry. Use -h to get a list of programs."
<> header "hgeometry-examples - Examples for HGeometry"
)
--------------------------------------------------------------------------------
main :: IO ()
main = execParser options >>= mainWith
command' :: Data o => (a -> o) -> ParserInfo a -> Mod CommandFields o
command' constr p = command (show . toConstr $ constr undefined) (constr <$> p)
noOpts :: InfoMod () -> ParserInfo ()
noOpts = info (pure ())
data BAPCOptions = BAPCOptions { year :: Int
}
deriving Data