cobot-io-0.1.3.14: src/Bio/FASTA/Writer.hs
module Bio.FASTA.Writer
( fastaToText
, WritableFastaToken (..)
) where
import Bio.FASTA.Type (Fasta, FastaItem (..), ModItem (..), modificationToString)
import Bio.Sequence (BareSequence, sequ)
import Control.Lens ((^.))
import Data.List.Split (chunksOf)
import Data.Text (Text, pack)
import Data.Vector (Vector, toList)
import Prelude hiding (drop)
class WritableFastaToken a where
tokenToString :: a -> String
instance WritableFastaToken Char where
tokenToString = pure
instance WritableFastaToken ModItem where
tokenToString (Letter l) = [l]
tokenToString (Mod m) = modificationToString m
fastaToText :: WritableFastaToken a => Fasta a -> Text
fastaToText f = mconcat $ map writeItem f
writeItem :: WritableFastaToken a => FastaItem a -> Text
writeItem (FastaItem name s) = ">" <> name <> "\n" <> seq2Text s
seq2Text :: WritableFastaToken a => BareSequence a -> Text
seq2Text s = pack $ vector2Text $ s ^. Bio.Sequence.sequ
vector2Text :: WritableFastaToken a => Vector a -> String
vector2Text v = concatMap (++ "\n") $ chunksOf 80 $ concatMap tokenToString $ toList v