{-# LANGUAGE CPP #-}
module Bio.GB
( module T
, fromFile
, toFile
, fromText
, toText
, genBankP
) where
import Bio.GB.Parser
import Bio.GB.Type as T
import Bio.GB.Writer (genBankToText)
import Control.Monad.IO.Class (MonadIO, liftIO)
import Data.Attoparsec.Text (parseOnly)
import Data.Bifunctor (first)
import Data.Text (Text, pack)
import qualified Data.Text.IO as TIO (readFile, writeFile)
#if !MIN_VERSION_base(4,13,0)
import Control.Monad.Fail (MonadFail(..))
import Prelude hiding (fail)
#endif
fromFile :: (MonadFail m, MonadIO m) => FilePath -> m GenBankSequence
fromFile f = liftIO (TIO.readFile f) >>= either fail pure . parseOnly genBankP
toFile :: MonadIO m => GenBankSequence -> FilePath -> m ()
toFile s f = liftIO $ TIO.writeFile f $ genBankToText s
fromText :: Text -> Either Text GenBankSequence
fromText = first pack . parseOnly genBankP
toText :: GenBankSequence -> Text
toText = genBankToText