{- | Module : Compare.Options Description : Options for the compare subcommand Copyright : (c) Dominik Schrempf 2019 License : GPL-3 Maintainer : dominik.schrempf@gmail.com Stability : unstable Portability : portable Creation date: Thu Sep 19 15:02:21 2019. -} module Compare.Options ( CompareArguments (..) , Compare , compareArguments ) where import Control.Monad.Logger import Control.Monad.Trans.Reader import Options.Applicative -- | Arguments of compare command. data CompareArguments = CompareArguments { argsNormalize :: Bool , argsBipartitions :: Bool , argsNewickIqTree :: Bool , argsInFiles :: [FilePath] } -- | Logger and reader data type. type Compare = LoggingT (ReaderT CompareArguments IO) -- | Parse arguments of compare command. compareArguments :: Parser CompareArguments compareArguments = CompareArguments <$> normalize <*> bipartitions <*> newickIqTree <*> some file normalize :: Parser Bool normalize = switch $ long "normalize" <> short 'n' <> help "Normalize trees before comparison" bipartitions :: Parser Bool bipartitions = switch $ long "bipartitions" <> short 'b' <> help "Print common and missing bipartitions" file :: Parser FilePath file = strArgument $ metavar "NAME" <> help "Tree file" newickIqTree :: Parser Bool newickIqTree = switch $ long "newick-iqtree" <> short 'i' <> help "Use IQ-TREE Newick format (internal node labels are branch support values)"