module Bio.FASTA.Writer ( fastaToText ) where import Bio.FASTA.Type (Fasta, FastaItem(..)) import Bio.Sequence (BareSequence, sequ) import Control.Lens ((^.)) import Data.Text (Text, pack) import Data.List.Split (chunksOf) import Data.Vector (Vector, toList) import Prelude hiding (drop) fastaToText :: Fasta Char -> Text fastaToText :: Fasta Char -> Text fastaToText Fasta Char f = [Text] -> Text forall a. Monoid a => [a] -> a mconcat ([Text] -> Text) -> [Text] -> Text forall a b. (a -> b) -> a -> b $ (FastaItem Char -> Text) -> Fasta Char -> [Text] forall a b. (a -> b) -> [a] -> [b] map FastaItem Char -> Text writeItem Fasta Char f writeItem :: FastaItem Char -> Text writeItem :: FastaItem Char -> Text writeItem (FastaItem Text name BareSequence Char s) = Text ">" Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> Text name Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> Text "\n" Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> BareSequence Char -> Text seq2Text BareSequence Char s seq2Text :: BareSequence Char -> Text seq2Text :: BareSequence Char -> Text seq2Text BareSequence Char s = String -> Text pack (String -> Text) -> String -> Text forall a b. (a -> b) -> a -> b $ Vector Char -> String vector2Text (Vector Char -> String) -> Vector Char -> String forall a b. (a -> b) -> a -> b $ BareSequence Char s BareSequence Char -> Getting (Vector Char) (BareSequence Char) (Vector Char) -> Vector Char forall s a. s -> Getting a s a -> a ^. Getting (Vector Char) (BareSequence Char) (Vector Char) forall mk w a. Getter (Sequence mk w a) (Vector a) Bio.Sequence.sequ vector2Text :: Vector Char -> String vector2Text :: Vector Char -> String vector2Text Vector Char v = (String -> String) -> [String] -> String forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b] concatMap (String -> String -> String forall a. [a] -> [a] -> [a] ++ String "\n") ([String] -> String) -> [String] -> String forall a b. (a -> b) -> a -> b $ Int -> String -> [String] forall e. Int -> [e] -> [[e]] chunksOf Int 80 (String -> [String]) -> String -> [String] forall a b. (a -> b) -> a -> b $ Vector Char -> String forall a. Vector a -> [a] toList Vector Char v