module Biobase.Fasta.Export where
import Biobase.Fasta.Types
import qualified Data.ByteString.Lazy.Char8 as B
import Data.List
import GHC.Int
instance Show Fasta where
show (Fasta _header _sequence) =
(B.unpack _header) ++ "\n" ++ (B.unpack _sequence) ++ "\n"
prettyPrintFasta :: Int -> Fasta -> String
prettyPrintFasta number (Fasta _header _sequence) = (B.unpack _header) ++ "\n" ++ (B.unpack sequenceLines) ++ "\n"
where sequenceSlices = breakByteString number _sequence
sequenceLines = B.intercalate (B.pack "\n") sequenceSlices
prettyByteStringFasta :: Int -> Fasta -> B.ByteString
prettyByteStringFasta number (Fasta _header _sequence) = _header `B.append` bslinebreak `B.append` sequenceLines `B.append` bslinebreak
where sequenceSlices = breakByteString number _sequence
sequenceLines = B.intercalate (B.pack "\n") sequenceSlices
bslinebreak = B.pack "\n"
breakByteString :: Int -> B.ByteString -> [B.ByteString]
breakByteString number bs
| B.empty == currentLine = []
| otherwise = currentLine:(breakByteString number rest)
where (currentLine,rest) = B.splitAt (fromIntToInt64 number) bs
fromIntToInt64 :: Int -> Int64
fromIntToInt64 = fromIntegral
writeFastaFile :: FilePath -> [Fasta] -> IO ()
writeFastaFile filePath fastas = do
let fastabs = map (prettyByteStringFasta 80) fastas
let outputbs= B.concat fastabs
B.writeFile filePath outputbs