module Bio.FASTA
  ( module T
  , fromFile
  , toFile
  , fastaP
  ) where

import           Bio.FASTA.Parser
import           Bio.FASTA.Type             as T
import           Bio.FASTA.Writer           (fastaToText)
import           Control.Monad.IO.Class     (MonadIO, liftIO)
import           Data.Attoparsec.Text       (parseOnly)
import           Data.Text.IO               (readFile, writeFile)
import           Prelude            hiding  (writeFile, readFile)

-- | Reads 'FastaSequence' from given file.
--
fromFile :: MonadIO m => FilePath -> m (Fasta Char)
fromFile f = liftIO (readFile f) >>= either fail pure . parseOnly fastaP

-- | Writes 'FastaSequence' to file.
--
toFile :: MonadIO m => Fasta Char -> FilePath -> m ()
toFile s f = liftIO $ writeFile f $ fastaToText s