{-# LANGUAGE OverloadedStrings #-}
module SLynx.Concatenate.Concatenate
( concatenateCmd,
)
where
import Control.Monad.Trans.Reader
import ELynx.Sequence.Export.Fasta
import qualified ELynx.Sequence.Sequence as S
import ELynx.Tools.ELynx
import ELynx.Tools.Environment
import SLynx.Concatenate.Options
import SLynx.Tools
concatenateCmd :: ELynx ConcatenateArguments ()
concatenateCmd :: ELynx ConcatenateArguments ()
concatenateCmd = do
(ConcatenateArguments Alphabet
al [FilePath]
fps) <- forall (m :: * -> *) r a. Monad m => (r -> a) -> ReaderT r m a
reader forall a. Environment a -> a
localArguments
[[Sequence]]
sss <- forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (forall e.
(HasLock e, HasLogHandles e, HasVerbosity e) =>
Alphabet -> FilePath -> Logger e [Sequence]
readSeqs Alphabet
al) [FilePath]
fps
let result :: ByteString
result = [Sequence] -> ByteString
sequencesToFasta forall a b. (a -> b) -> a -> b
$ [[Sequence]] -> [Sequence]
S.concatSequences [[Sequence]]
sss
forall a.
Reproducible a =>
FilePath -> ByteString -> FilePath -> ELynx a ()
out FilePath
"concatenated multi sequence alignment " ByteString
result FilePath
".fasta"