{-# LANGUAGE CPP #-}
module Bio.Uniprot
( module T
, parseRecord
, fetch
) where
import Data.Text.Encoding ( decodeUtf8 )
import Data.String ( IsString(..) )
import Data.Attoparsec.Text ( parseOnly )
import Control.Monad.IO.Class ( MonadIO )
import Network.HTTP.Simple ( httpBS, getResponseBody )
#if !MIN_VERSION_base(4,13,0)
import Control.Monad.Fail ( MonadFail(..) )
import Prelude hiding ( fail )
#endif
import Bio.Uniprot.Type as T
import Bio.Uniprot.Parser
fetch :: (MonadFail m, MonadIO m) => String -> m Record
fetch recid = do let url = fromString $ "https://www.uniprot.org/uniprot/" <> recid <> ".txt"
resp <- httpBS url
case parseOnly parseRecord (decodeUtf8 $ getResponseBody resp) of
Left err -> fail err
Right r -> pure r