-- Utility Module -- By Gregory W. Schwartz {- | Collects all helpful random functions. -} module Data.Fasta.String.Utility ( getField , compl , revCompl ) where -- Built in import Data.Maybe -- Cabal import Control.Lens import qualified Data.List.Split as Split -- Local import Data.Fasta.String.Types import Data.Fasta.Utility -- | Gets a 1 indexed field from the header of a fasta sequence using a certain -- delimiter. getField :: Int -> Char -> FastaSequence -> String getField field delim = fromMaybe (error "getField: Field out of bounds in fasta header") . preview (ix $ field - 1) . Split.splitWhen (== delim) . fastaHeader -- | Gets the complement of the sequence. compl :: FastaSequence -> FastaSequence compl fs = fs { fastaSeq = fmap complRules . fastaSeq $ fs } -- | Gets the reverse complement of the sequence. revCompl :: FastaSequence -> FastaSequence revCompl fs = fs { fastaSeq = reverse . fmap complRules . fastaSeq $ fs }