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.Bifunctor (first)
import Data.Text (Text, pack)
import qualified Data.Text.IO as TIO (readFile, writeFile)
import Text.Megaparsec (eof, errorBundlePretty, parse)
fromFile :: (MonadFail m, MonadIO m) => FilePath -> m GenBankSequence
fromFile :: forall (m :: * -> *).
(MonadFail m, MonadIO m) =>
FilePath -> m GenBankSequence
fromFile FilePath
f = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (FilePath -> IO Text
TIO.readFile FilePath
f) forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either (forall (m :: * -> *) a. MonadFail m => FilePath -> m a
fail forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall s e.
(VisualStream s, TraversableStream s, ShowErrorComponent e) =>
ParseErrorBundle s e -> FilePath
errorBundlePretty) forall (f :: * -> *) a. Applicative f => a -> f a
pure forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall e s a.
Parsec e s a -> FilePath -> s -> Either (ParseErrorBundle s e) a
parse (ParsecT Void Text Identity GenBankSequence
genBankP forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall e s (m :: * -> *). MonadParsec e s m => m ()
eof) FilePath
""
toFile :: MonadIO m => GenBankSequence -> FilePath -> m ()
toFile :: forall (m :: * -> *).
MonadIO m =>
GenBankSequence -> FilePath -> m ()
toFile GenBankSequence
s FilePath
f = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ FilePath -> Text -> IO ()
TIO.writeFile FilePath
f forall a b. (a -> b) -> a -> b
$ GenBankSequence -> Text
genBankToText GenBankSequence
s
fromText :: Text -> Either Text GenBankSequence
fromText :: Text -> Either Text GenBankSequence
fromText = forall (p :: * -> * -> *) a b c.
Bifunctor p =>
(a -> b) -> p a c -> p b c
first (FilePath -> Text
pack forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall s e.
(VisualStream s, TraversableStream s, ShowErrorComponent e) =>
ParseErrorBundle s e -> FilePath
errorBundlePretty) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall e s a.
Parsec e s a -> FilePath -> s -> Either (ParseErrorBundle s e) a
parse (ParsecT Void Text Identity GenBankSequence
genBankP forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall e s (m :: * -> *). MonadParsec e s m => m ()
eof) FilePath
""
toText :: GenBankSequence -> Text
toText :: GenBankSequence -> Text
toText = GenBankSequence -> Text
genBankToText