{-# LANGUAGE DeriveGeneric #-}
module SLynx.Options (CommandArguments (..)) where
import Data.Aeson
import ELynx.Data.Alphabet.Alphabet
import ELynx.Tools.Options
import ELynx.Tools.Reproduction
import GHC.Generics
import Options.Applicative
import SLynx.Concatenate.Options
import SLynx.Examine.Options
import SLynx.Filter.Options
import SLynx.Simulate.Options
import SLynx.SubSample.Options
import SLynx.Translate.Options
data CommandArguments
= Concatenate ConcatenateArguments
| Examine ExamineArguments
| FilterCols FilterColsArguments
| FilterRows FilterRowsArguments
| Simulate SimulateArguments
| SubSample SubSampleArguments
| Translate TranslateArguments
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 (Concatenate ConcatenateArguments
a) = ConcatenateArguments -> [String]
forall a. Reproducible a => a -> [String]
inFiles ConcatenateArguments
a
inFiles (Examine ExamineArguments
a) = ExamineArguments -> [String]
forall a. Reproducible a => a -> [String]
inFiles ExamineArguments
a
inFiles (FilterCols FilterColsArguments
a) = FilterColsArguments -> [String]
forall a. Reproducible a => a -> [String]
inFiles FilterColsArguments
a
inFiles (FilterRows FilterRowsArguments
a) = FilterRowsArguments -> [String]
forall a. Reproducible a => a -> [String]
inFiles FilterRowsArguments
a
inFiles (Simulate SimulateArguments
a) = SimulateArguments -> [String]
forall a. Reproducible a => a -> [String]
inFiles SimulateArguments
a
inFiles (SubSample SubSampleArguments
a) = SubSampleArguments -> [String]
forall a. Reproducible a => a -> [String]
inFiles SubSampleArguments
a
inFiles (Translate TranslateArguments
a) = TranslateArguments -> [String]
forall a. Reproducible a => a -> [String]
inFiles TranslateArguments
a
outSuffixes :: CommandArguments -> [String]
outSuffixes (Concatenate ConcatenateArguments
a) = ConcatenateArguments -> [String]
forall a. Reproducible a => a -> [String]
outSuffixes ConcatenateArguments
a
outSuffixes (Examine ExamineArguments
a) = ExamineArguments -> [String]
forall a. Reproducible a => a -> [String]
outSuffixes ExamineArguments
a
outSuffixes (FilterCols FilterColsArguments
a) = FilterColsArguments -> [String]
forall a. Reproducible a => a -> [String]
outSuffixes FilterColsArguments
a
outSuffixes (FilterRows FilterRowsArguments
a) = FilterRowsArguments -> [String]
forall a. Reproducible a => a -> [String]
outSuffixes FilterRowsArguments
a
outSuffixes (Simulate SimulateArguments
a) = SimulateArguments -> [String]
forall a. Reproducible a => a -> [String]
outSuffixes SimulateArguments
a
outSuffixes (SubSample SubSampleArguments
a) = SubSampleArguments -> [String]
forall a. Reproducible a => a -> [String]
outSuffixes SubSampleArguments
a
outSuffixes (Translate TranslateArguments
a) = TranslateArguments -> [String]
forall a. Reproducible a => a -> [String]
outSuffixes TranslateArguments
a
getSeed :: CommandArguments -> Maybe SeedOpt
getSeed (Concatenate ConcatenateArguments
a) = ConcatenateArguments -> Maybe SeedOpt
forall a. Reproducible a => a -> Maybe SeedOpt
getSeed ConcatenateArguments
a
getSeed (Examine ExamineArguments
a) = ExamineArguments -> Maybe SeedOpt
forall a. Reproducible a => a -> Maybe SeedOpt
getSeed ExamineArguments
a
getSeed (FilterCols FilterColsArguments
a) = FilterColsArguments -> Maybe SeedOpt
forall a. Reproducible a => a -> Maybe SeedOpt
getSeed FilterColsArguments
a
getSeed (FilterRows FilterRowsArguments
a) = FilterRowsArguments -> Maybe SeedOpt
forall a. Reproducible a => a -> Maybe SeedOpt
getSeed FilterRowsArguments
a
getSeed (Simulate SimulateArguments
a) = SimulateArguments -> Maybe SeedOpt
forall a. Reproducible a => a -> Maybe SeedOpt
getSeed SimulateArguments
a
getSeed (SubSample SubSampleArguments
a) = SubSampleArguments -> Maybe SeedOpt
forall a. Reproducible a => a -> Maybe SeedOpt
getSeed SubSampleArguments
a
getSeed (Translate TranslateArguments
a) = TranslateArguments -> Maybe SeedOpt
forall a. Reproducible a => a -> Maybe SeedOpt
getSeed TranslateArguments
a
setSeed :: CommandArguments -> SeedOpt -> CommandArguments
setSeed (Concatenate ConcatenateArguments
a) = ConcatenateArguments -> CommandArguments
Concatenate (ConcatenateArguments -> CommandArguments)
-> (SeedOpt -> ConcatenateArguments) -> SeedOpt -> CommandArguments
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConcatenateArguments -> SeedOpt -> ConcatenateArguments
forall a. Reproducible a => a -> SeedOpt -> a
setSeed ConcatenateArguments
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 (FilterCols FilterColsArguments
a) = FilterColsArguments -> CommandArguments
FilterCols (FilterColsArguments -> CommandArguments)
-> (SeedOpt -> FilterColsArguments) -> SeedOpt -> CommandArguments
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilterColsArguments -> SeedOpt -> FilterColsArguments
forall a. Reproducible a => a -> SeedOpt -> a
setSeed FilterColsArguments
a
setSeed (FilterRows FilterRowsArguments
a) = FilterRowsArguments -> CommandArguments
FilterRows (FilterRowsArguments -> CommandArguments)
-> (SeedOpt -> FilterRowsArguments) -> SeedOpt -> CommandArguments
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilterRowsArguments -> SeedOpt -> FilterRowsArguments
forall a. Reproducible a => a -> SeedOpt -> a
setSeed FilterRowsArguments
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
setSeed (SubSample SubSampleArguments
a) = SubSampleArguments -> CommandArguments
SubSample (SubSampleArguments -> CommandArguments)
-> (SeedOpt -> SubSampleArguments) -> SeedOpt -> CommandArguments
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SubSampleArguments -> SeedOpt -> SubSampleArguments
forall a. Reproducible a => a -> SeedOpt -> a
setSeed SubSampleArguments
a
setSeed (Translate TranslateArguments
a) = TranslateArguments -> CommandArguments
Translate (TranslateArguments -> CommandArguments)
-> (SeedOpt -> TranslateArguments) -> SeedOpt -> CommandArguments
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TranslateArguments -> SeedOpt -> TranslateArguments
forall a. Reproducible a => a -> SeedOpt -> a
setSeed TranslateArguments
a
parser :: Parser CommandArguments
parser = Parser CommandArguments
commandArguments
cmdName :: String
cmdName = String
"slynx"
cmdDsc :: [String]
cmdDsc = [String
"Analyze, and simulate multi sequence alignments."]
cmdFtr :: [String]
cmdFtr =
[ String
"",
String
"Available sequence file formats:"
]
[String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [String]
fs
[String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [String
"", String
"Available alphabets:"]
[String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [String]
as
where
toListItem :: ShowS
toListItem = (String
" - " String -> ShowS
forall a. [a] -> [a] -> [a]
++)
fs :: [String]
fs = ShowS -> [String] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map ShowS
toListItem [String
"FASTA"]
as :: [String]
as = (Alphabet -> String) -> [Alphabet] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map (ShowS
toListItem ShowS -> (Alphabet -> String) -> Alphabet -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Alphabet -> String
alphabetDescription) ([Alphabet
forall a. Bounded a => a
minBound ..] :: [Alphabet])
instance FromJSON CommandArguments
instance ToJSON CommandArguments
concatenateCommand :: Mod CommandFields CommandArguments
concatenateCommand :: Mod CommandFields CommandArguments
concatenateCommand = (ConcatenateArguments -> CommandArguments)
-> Mod CommandFields CommandArguments
forall a b. Reproducible a => (a -> b) -> Mod CommandFields b
createCommandReproducible ConcatenateArguments -> CommandArguments
Concatenate
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
filterColumnsCommand :: Mod CommandFields CommandArguments
filterColumnsCommand :: Mod CommandFields CommandArguments
filterColumnsCommand = (FilterColsArguments -> CommandArguments)
-> Mod CommandFields CommandArguments
forall a b. Reproducible a => (a -> b) -> Mod CommandFields b
createCommandReproducible FilterColsArguments -> CommandArguments
FilterCols
filterRowsCommand :: Mod CommandFields CommandArguments
filterRowsCommand :: Mod CommandFields CommandArguments
filterRowsCommand = (FilterRowsArguments -> CommandArguments)
-> Mod CommandFields CommandArguments
forall a b. Reproducible a => (a -> b) -> Mod CommandFields b
createCommandReproducible FilterRowsArguments -> CommandArguments
FilterRows
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
subSampleCommand :: Mod CommandFields CommandArguments
subSampleCommand :: Mod CommandFields CommandArguments
subSampleCommand = (SubSampleArguments -> CommandArguments)
-> Mod CommandFields CommandArguments
forall a b. Reproducible a => (a -> b) -> Mod CommandFields b
createCommandReproducible SubSampleArguments -> CommandArguments
SubSample
translateCommand :: Mod CommandFields CommandArguments
translateCommand :: Mod CommandFields CommandArguments
translateCommand = (TranslateArguments -> CommandArguments)
-> Mod CommandFields CommandArguments
forall a b. Reproducible a => (a -> b) -> Mod CommandFields b
createCommandReproducible TranslateArguments -> CommandArguments
Translate
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
concatenateCommand
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
filterColumnsCommand
Mod CommandFields CommandArguments
-> Mod CommandFields CommandArguments
-> Mod CommandFields CommandArguments
forall a. Semigroup a => a -> a -> a
<> Mod CommandFields CommandArguments
filterRowsCommand
Mod CommandFields CommandArguments
-> Mod CommandFields CommandArguments
-> Mod CommandFields CommandArguments
forall a. Semigroup a => a -> a -> a
<> Mod CommandFields CommandArguments
simulateCommand
Mod CommandFields CommandArguments
-> Mod CommandFields CommandArguments
-> Mod CommandFields CommandArguments
forall a. Semigroup a => a -> a -> a
<> Mod CommandFields CommandArguments
subSampleCommand
Mod CommandFields CommandArguments
-> Mod CommandFields CommandArguments
-> Mod CommandFields CommandArguments
forall a. Semigroup a => a -> a -> a
<> Mod CommandFields CommandArguments
translateCommand