{-# LANGUAGE DeriveGeneric #-}
module TLynx.Options (CommandArguments (..)) where
import Data.Aeson
import ELynx.Tools.Options
import ELynx.Tools.Reproduction
import GHC.Generics
import Options.Applicative
import TLynx.Compare.Options
import TLynx.Connect.Options
import TLynx.Distance.Options
import TLynx.Examine.Options
import TLynx.Parsers (newickHelp)
import TLynx.Shuffle.Options
import TLynx.Simulate.Options
data CommandArguments
= Compare CompareArguments
| Connect ConnectArguments
| Distance DistanceArguments
| Examine ExamineArguments
| Shuffle ShuffleArguments
| Simulate SimulateArguments
deriving (CommandArguments -> CommandArguments -> Bool
(CommandArguments -> CommandArguments -> Bool)
-> (CommandArguments -> CommandArguments -> Bool)
-> Eq CommandArguments
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CommandArguments -> CommandArguments -> Bool
$c/= :: CommandArguments -> CommandArguments -> Bool
== :: CommandArguments -> CommandArguments -> Bool
$c== :: CommandArguments -> CommandArguments -> Bool
Eq, Int -> CommandArguments -> ShowS
[CommandArguments] -> ShowS
CommandArguments -> String
(Int -> CommandArguments -> ShowS)
-> (CommandArguments -> String)
-> ([CommandArguments] -> ShowS)
-> Show CommandArguments
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CommandArguments] -> ShowS
$cshowList :: [CommandArguments] -> ShowS
show :: CommandArguments -> String
$cshow :: CommandArguments -> String
showsPrec :: Int -> CommandArguments -> ShowS
$cshowsPrec :: Int -> CommandArguments -> ShowS
Show, (forall x. CommandArguments -> Rep CommandArguments x)
-> (forall x. Rep CommandArguments x -> CommandArguments)
-> Generic CommandArguments
forall x. Rep CommandArguments x -> CommandArguments
forall x. CommandArguments -> Rep CommandArguments x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CommandArguments x -> CommandArguments
$cfrom :: forall x. CommandArguments -> Rep CommandArguments x
Generic)
instance Reproducible CommandArguments where
inFiles :: CommandArguments -> [String]
inFiles (Compare CompareArguments
a) = CompareArguments -> [String]
forall a. Reproducible a => a -> [String]
inFiles CompareArguments
a
inFiles (Connect ConnectArguments
a) = ConnectArguments -> [String]
forall a. Reproducible a => a -> [String]
inFiles ConnectArguments
a
inFiles (Distance DistanceArguments
a) = DistanceArguments -> [String]
forall a. Reproducible a => a -> [String]
inFiles DistanceArguments
a
inFiles (Examine ExamineArguments
a) = ExamineArguments -> [String]
forall a. Reproducible a => a -> [String]
inFiles ExamineArguments
a
inFiles (Shuffle ShuffleArguments
a) = ShuffleArguments -> [String]
forall a. Reproducible a => a -> [String]
inFiles ShuffleArguments
a
inFiles (Simulate SimulateArguments
a) = SimulateArguments -> [String]
forall a. Reproducible a => a -> [String]
inFiles SimulateArguments
a
outSuffixes :: CommandArguments -> [String]
outSuffixes (Compare CompareArguments
a) = CompareArguments -> [String]
forall a. Reproducible a => a -> [String]
outSuffixes CompareArguments
a
outSuffixes (Connect ConnectArguments
a) = ConnectArguments -> [String]
forall a. Reproducible a => a -> [String]
outSuffixes ConnectArguments
a
outSuffixes (Distance DistanceArguments
a) = DistanceArguments -> [String]
forall a. Reproducible a => a -> [String]
outSuffixes DistanceArguments
a
outSuffixes (Examine ExamineArguments
a) = ExamineArguments -> [String]
forall a. Reproducible a => a -> [String]
outSuffixes ExamineArguments
a
outSuffixes (Shuffle ShuffleArguments
a) = ShuffleArguments -> [String]
forall a. Reproducible a => a -> [String]
outSuffixes ShuffleArguments
a
outSuffixes (Simulate SimulateArguments
a) = SimulateArguments -> [String]
forall a. Reproducible a => a -> [String]
outSuffixes SimulateArguments
a
getSeed :: CommandArguments -> Maybe SeedOpt
getSeed (Compare CompareArguments
a) = CompareArguments -> Maybe SeedOpt
forall a. Reproducible a => a -> Maybe SeedOpt
getSeed CompareArguments
a
getSeed (Connect ConnectArguments
a) = ConnectArguments -> Maybe SeedOpt
forall a. Reproducible a => a -> Maybe SeedOpt
getSeed ConnectArguments
a
getSeed (Distance DistanceArguments
a) = DistanceArguments -> Maybe SeedOpt
forall a. Reproducible a => a -> Maybe SeedOpt
getSeed DistanceArguments
a
getSeed (Examine ExamineArguments
a) = ExamineArguments -> Maybe SeedOpt
forall a. Reproducible a => a -> Maybe SeedOpt
getSeed ExamineArguments
a
getSeed (Shuffle ShuffleArguments
a) = ShuffleArguments -> Maybe SeedOpt
forall a. Reproducible a => a -> Maybe SeedOpt
getSeed ShuffleArguments
a
getSeed (Simulate SimulateArguments
a) = SimulateArguments -> Maybe SeedOpt
forall a. Reproducible a => a -> Maybe SeedOpt
getSeed SimulateArguments
a
setSeed :: CommandArguments -> SeedOpt -> CommandArguments
setSeed (Compare CompareArguments
a) = CompareArguments -> CommandArguments
Compare (CompareArguments -> CommandArguments)
-> (SeedOpt -> CompareArguments) -> SeedOpt -> CommandArguments
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CompareArguments -> SeedOpt -> CompareArguments
forall a. Reproducible a => a -> SeedOpt -> a
setSeed CompareArguments
a
setSeed (Connect ConnectArguments
a) = ConnectArguments -> CommandArguments
Connect (ConnectArguments -> CommandArguments)
-> (SeedOpt -> ConnectArguments) -> SeedOpt -> CommandArguments
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConnectArguments -> SeedOpt -> ConnectArguments
forall a. Reproducible a => a -> SeedOpt -> a
setSeed ConnectArguments
a
setSeed (Distance DistanceArguments
a) = DistanceArguments -> CommandArguments
Distance (DistanceArguments -> CommandArguments)
-> (SeedOpt -> DistanceArguments) -> SeedOpt -> CommandArguments
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DistanceArguments -> SeedOpt -> DistanceArguments
forall a. Reproducible a => a -> SeedOpt -> a
setSeed DistanceArguments
a
setSeed (Examine ExamineArguments
a) = ExamineArguments -> CommandArguments
Examine (ExamineArguments -> CommandArguments)
-> (SeedOpt -> ExamineArguments) -> SeedOpt -> CommandArguments
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ExamineArguments -> SeedOpt -> ExamineArguments
forall a. Reproducible a => a -> SeedOpt -> a
setSeed ExamineArguments
a
setSeed (Shuffle ShuffleArguments
a) = ShuffleArguments -> CommandArguments
Shuffle (ShuffleArguments -> CommandArguments)
-> (SeedOpt -> ShuffleArguments) -> SeedOpt -> CommandArguments
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShuffleArguments -> SeedOpt -> ShuffleArguments
forall a. Reproducible a => a -> SeedOpt -> a
setSeed ShuffleArguments
a
setSeed (Simulate SimulateArguments
a) = SimulateArguments -> CommandArguments
Simulate (SimulateArguments -> CommandArguments)
-> (SeedOpt -> SimulateArguments) -> SeedOpt -> CommandArguments
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SimulateArguments -> SeedOpt -> SimulateArguments
forall a. Reproducible a => a -> SeedOpt -> a
setSeed SimulateArguments
a
parser :: Parser CommandArguments
parser = Parser CommandArguments
commandArguments
cmdName :: String
cmdName = String
"tlynx"
cmdDsc :: [String]
cmdDsc = [String
"Compare, examine, and simulate phylogenetic trees."]
cmdFtr :: [String]
cmdFtr = String
"" String -> [String] -> [String]
forall a. a -> [a] -> [a]
: String
"Available tree file formats:" String -> [String] -> [String]
forall a. a -> [a] -> [a]
: [String] -> [String]
indent [String]
newickHelp
where
indent :: [String] -> [String]
indent = ShowS -> [String] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map (String
" " String -> ShowS
forall a. [a] -> [a] -> [a]
++)
instance FromJSON CommandArguments
instance ToJSON CommandArguments
compareCommand :: Mod CommandFields CommandArguments
compareCommand :: Mod CommandFields CommandArguments
compareCommand = (CompareArguments -> CommandArguments)
-> Mod CommandFields CommandArguments
forall a b. Reproducible a => (a -> b) -> Mod CommandFields b
createCommandReproducible CompareArguments -> CommandArguments
Compare
connectCommand :: Mod CommandFields CommandArguments
connectCommand :: Mod CommandFields CommandArguments
connectCommand = (ConnectArguments -> CommandArguments)
-> Mod CommandFields CommandArguments
forall a b. Reproducible a => (a -> b) -> Mod CommandFields b
createCommandReproducible ConnectArguments -> CommandArguments
Connect
distanceCommand :: Mod CommandFields CommandArguments
distanceCommand :: Mod CommandFields CommandArguments
distanceCommand = (DistanceArguments -> CommandArguments)
-> Mod CommandFields CommandArguments
forall a b. Reproducible a => (a -> b) -> Mod CommandFields b
createCommandReproducible DistanceArguments -> CommandArguments
Distance
examineCommand :: Mod CommandFields CommandArguments
examineCommand :: Mod CommandFields CommandArguments
examineCommand = (ExamineArguments -> CommandArguments)
-> Mod CommandFields CommandArguments
forall a b. Reproducible a => (a -> b) -> Mod CommandFields b
createCommandReproducible ExamineArguments -> CommandArguments
Examine
shuffleCommand :: Mod CommandFields CommandArguments
shuffleCommand :: Mod CommandFields CommandArguments
shuffleCommand = (ShuffleArguments -> CommandArguments)
-> Mod CommandFields CommandArguments
forall a b. Reproducible a => (a -> b) -> Mod CommandFields b
createCommandReproducible ShuffleArguments -> CommandArguments
Shuffle
simulateCommand :: Mod CommandFields CommandArguments
simulateCommand :: Mod CommandFields CommandArguments
simulateCommand = (SimulateArguments -> CommandArguments)
-> Mod CommandFields CommandArguments
forall a b. Reproducible a => (a -> b) -> Mod CommandFields b
createCommandReproducible SimulateArguments -> CommandArguments
Simulate
commandArguments :: Parser CommandArguments
commandArguments :: Parser CommandArguments
commandArguments =
Mod CommandFields CommandArguments -> Parser CommandArguments
forall a. Mod CommandFields a -> Parser a
hsubparser (Mod CommandFields CommandArguments -> Parser CommandArguments)
-> Mod CommandFields CommandArguments -> Parser CommandArguments
forall a b. (a -> b) -> a -> b
$
Mod CommandFields CommandArguments
compareCommand
Mod CommandFields CommandArguments
-> Mod CommandFields CommandArguments
-> Mod CommandFields CommandArguments
forall a. Semigroup a => a -> a -> a
<> Mod CommandFields CommandArguments
connectCommand
Mod CommandFields CommandArguments
-> Mod CommandFields CommandArguments
-> Mod CommandFields CommandArguments
forall a. Semigroup a => a -> a -> a
<> Mod CommandFields CommandArguments
distanceCommand
Mod CommandFields CommandArguments
-> Mod CommandFields CommandArguments
-> Mod CommandFields CommandArguments
forall a. Semigroup a => a -> a -> a
<> Mod CommandFields CommandArguments
examineCommand
Mod CommandFields CommandArguments
-> Mod CommandFields CommandArguments
-> Mod CommandFields CommandArguments
forall a. Semigroup a => a -> a -> a
<> Mod CommandFields CommandArguments
shuffleCommand
Mod CommandFields CommandArguments
-> Mod CommandFields CommandArguments
-> Mod CommandFields CommandArguments
forall a. Semigroup a => a -> a -> a
<> Mod CommandFields CommandArguments
simulateCommand