{- |
Module      :  ELynx.Export.Sequence.Fasta
Description :  Export Fasta sequences
Copyright   :  (c) Dominik Schrempf 2018
License     :  GPL-3


Maintainer  :  dominik.schrempf@gmail.com
Stability   :  unstable
Portability :  portable

Write FASTA files.

[NCBI file specifications](https://blast.ncbi.nlm.nih.gov/Blast.cgi?CMD=Web&PAGE_TYPE=BlastDocs&DOC_TYPE=BlastHelp).

-}


module ELynx.Export.Sequence.Fasta
  ( sequenceToFasta
  , sequencesToFasta
  ) where

import qualified Data.ByteString.Lazy.Char8   as L

import           ELynx.Data.Sequence.Sequence

fastaHeader :: L.ByteString -> L.ByteString
fastaHeader i = L.singleton '>' <> i

-- | Convert a 'Sequence' to Fasta format.
sequenceToFasta :: Sequence -> L.ByteString
sequenceToFasta s = L.unlines [ fastaHeader $ name s, toByteString $ characters s ]

-- | Convert a list 'Sequence's to Fasta format. A newline is added between any
-- two 'Sequence's.
sequencesToFasta :: [Sequence] -> L.ByteString
sequencesToFasta ss = L.concat $ map sequenceToFasta ss