{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TemplateHaskell #-} {- | Module : Tools Description : Common tools for sequence lynx Copyright : (c) Dominik Schrempf 2019 License : GPL-3 Maintainer : dominik.schrempf@gmail.com Stability : unstable Portability : portable Creation date: Sat Sep 7 06:24:22 2019. -} module Tools ( -- * Tools readSeqs -- * Options , alphabetOpt ) where import Control.Monad.IO.Class import Control.Monad.Logger import qualified Data.Text as T import Options.Applicative import ELynx.Data.Alphabet.Alphabet import ELynx.Data.Sequence.Sequence import ELynx.Import.Sequence.Fasta import ELynx.Tools.InputOutput -- | Read sequences of given alphabet from file or standard input. readSeqs :: (MonadIO m, MonadLogger m) => Alphabet -> Maybe FilePath -> m [Sequence] readSeqs a mfp = do case mfp of Nothing -> $(logInfo) $ T.pack $ "Read sequences from standard input; alphabet " <> show a <> "." Just fp -> $(logInfo) $ T.pack $ "Read sequences from file " <> fp <> "; alphabet" <> show a <> "." liftIO $ parseFileOrIOWith (fasta a) mfp -- | Command line option to specify the alphabet. Used by various commands. alphabetOpt :: Parser Alphabet alphabetOpt = option auto $ long "alphabet" <> short 'a' <> metavar "NAME" <> help "Specify alphabet type NAME"