packages feed

hgeometry-0.5.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




--------------------------------------------------------------------------------

data Options = BAPC           BAPCOptions
             | DrawGPX        DrawGPX.Options
             | EnsembleWriter EnsembleWriter.Options
             | MinDisk        MinDisk.Options
             | Delaunay       Delaunay.Options
             deriving Data

parser :: Parser Options
parser = subparser (
       command' DrawGPX        DrawGPX.options
    <> command' EnsembleWriter EnsembleWriter.options
    <> command' MinDisk        MinDisk.options
    <> command' Delaunay       Delaunay.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


--------------------------------------------------------------------------------

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