{-# LANGUAGE OverloadedStrings #-}
module SLynx.Tools
(
readSeqs,
alphabetOpt,
)
where
import Control.Monad.IO.Class
import ELynx.Alphabet.Alphabet
import ELynx.Sequence.Import.Fasta
import ELynx.Sequence.Sequence
import ELynx.Tools.InputOutput
import ELynx.Tools.Logger
import Options.Applicative
readSeqs ::
(HasLock e, HasLogHandles e, HasVerbosity e) =>
Alphabet ->
FilePath ->
Logger e [Sequence]
readSeqs :: forall e.
(HasLock e, HasLogHandles e, HasVerbosity e) =>
Alphabet -> FilePath -> Logger e [Sequence]
readSeqs Alphabet
a FilePath
fp = do
forall e.
(HasLock e, HasLogHandles e, HasVerbosity e) =>
FilePath -> Logger e ()
logInfoS forall a b. (a -> b) -> a -> b
$
FilePath
"Read sequences from file "
forall a. Semigroup a => a -> a -> a
<> FilePath
fp
forall a. Semigroup a => a -> a -> a
<> FilePath
"; alphabet "
forall a. Semigroup a => a -> a -> a
<> forall a. Show a => a -> FilePath
show Alphabet
a
forall a. Semigroup a => a -> a -> a
<> FilePath
"."
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ forall a. Parser a -> FilePath -> IO a
parseFileWith (Alphabet -> Parser [Sequence]
fasta Alphabet
a) FilePath
fp
alphabetOpt :: Parser Alphabet
alphabetOpt :: Parser Alphabet
alphabetOpt =
forall a. ReadM a -> Mod OptionFields a -> Parser a
option forall a. Read a => ReadM a
auto forall a b. (a -> b) -> a -> b
$
forall (f :: * -> *) a. HasName f => FilePath -> Mod f a
long FilePath
"alphabet"
forall a. Semigroup a => a -> a -> a
<> forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'a'
forall a. Semigroup a => a -> a -> a
<> forall (f :: * -> *) a. HasMetavar f => FilePath -> Mod f a
metavar FilePath
"NAME"
forall a. Semigroup a => a -> a -> a
<> forall (f :: * -> *) a. FilePath -> Mod f a
help
FilePath
"Specify alphabet type NAME"