packages feed

slynx-0.6.0.0: src/SLynx/Tools.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}

-- |
-- Module      :  SLynx.Tools
-- Description :  Common tools for sequence lynx
-- Copyright   :  (c) Dominik Schrempf 2021
-- License     :  GPL-3.0-or-later
--
-- Maintainer  :  dominik.schrempf@gmail.com
-- Stability   :  unstable
-- Portability :  portable
--
-- Creation date: Sat Sep  7 06:24:22 2019.
module SLynx.Tools
  ( -- * SLynx.Tools
    readSeqs,

    -- * Options
    alphabetOpt,
  )
where

import Control.Monad.IO.Class
import ELynx.Data.Alphabet.Alphabet
import ELynx.Data.Sequence.Sequence
import ELynx.Import.Sequence.Fasta
import ELynx.Tools
import Options.Applicative

-- | Read sequences of given alphabet from file or standard input.
readSeqs ::
  (HasLock e, HasLogHandles e, HasVerbosity e) =>
  Alphabet ->
  FilePath ->
  Logger e [Sequence]
readSeqs a fp = do
  logInfoS $
    "Read sequences from file "
      <> fp
      <> "; alphabet "
      <> show a
      <> "."
  liftIO $ parseFileWith (fasta a) fp

-- | 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"