module TPDB.Input.Memory
where
import TPDB.Data
import TPDB.Plain.Read
import TPDB.XTC.Read
import qualified Data.Text.Lazy as T
import System.FilePath.Posix ( takeExtension )
get :: String -> T.Text
-> IO (Either String (Either (TRS Identifier Identifier) (SRS Identifier)))
get :: String
-> Text
-> IO
(Either
String (Either (TRS Identifier Identifier) (SRS Identifier)))
get String
f Text
s = case String -> String
takeExtension String
f of
String
".srs" -> do
case Text -> Either String (SRS Identifier)
srs Text
s of
Left String
err -> Either String (Either (TRS Identifier Identifier) (SRS Identifier))
-> IO
(Either
String (Either (TRS Identifier Identifier) (SRS Identifier)))
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Either
String (Either (TRS Identifier Identifier) (SRS Identifier))
-> IO
(Either
String (Either (TRS Identifier Identifier) (SRS Identifier))))
-> Either
String (Either (TRS Identifier Identifier) (SRS Identifier))
-> IO
(Either
String (Either (TRS Identifier Identifier) (SRS Identifier)))
forall a b. (a -> b) -> a -> b
$ String
-> Either
String (Either (TRS Identifier Identifier) (SRS Identifier))
forall a b. a -> Either a b
Left String
err
Right SRS Identifier
t -> Either String (Either (TRS Identifier Identifier) (SRS Identifier))
-> IO
(Either
String (Either (TRS Identifier Identifier) (SRS Identifier)))
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Either
String (Either (TRS Identifier Identifier) (SRS Identifier))
-> IO
(Either
String (Either (TRS Identifier Identifier) (SRS Identifier))))
-> Either
String (Either (TRS Identifier Identifier) (SRS Identifier))
-> IO
(Either
String (Either (TRS Identifier Identifier) (SRS Identifier)))
forall a b. (a -> b) -> a -> b
$ Either (TRS Identifier Identifier) (SRS Identifier)
-> Either
String (Either (TRS Identifier Identifier) (SRS Identifier))
forall a b. b -> Either a b
Right (Either (TRS Identifier Identifier) (SRS Identifier)
-> Either
String (Either (TRS Identifier Identifier) (SRS Identifier)))
-> Either (TRS Identifier Identifier) (SRS Identifier)
-> Either
String (Either (TRS Identifier Identifier) (SRS Identifier))
forall a b. (a -> b) -> a -> b
$ SRS Identifier
-> Either (TRS Identifier Identifier) (SRS Identifier)
forall a b. b -> Either a b
Right SRS Identifier
t
String
".trs" -> do
case Text -> Either String (TRS Identifier Identifier)
TPDB.Plain.Read.trs Text
s of
Left String
err -> Either String (Either (TRS Identifier Identifier) (SRS Identifier))
-> IO
(Either
String (Either (TRS Identifier Identifier) (SRS Identifier)))
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Either
String (Either (TRS Identifier Identifier) (SRS Identifier))
-> IO
(Either
String (Either (TRS Identifier Identifier) (SRS Identifier))))
-> Either
String (Either (TRS Identifier Identifier) (SRS Identifier))
-> IO
(Either
String (Either (TRS Identifier Identifier) (SRS Identifier)))
forall a b. (a -> b) -> a -> b
$ String
-> Either
String (Either (TRS Identifier Identifier) (SRS Identifier))
forall a b. a -> Either a b
Left String
err
Right TRS Identifier Identifier
t -> Either String (Either (TRS Identifier Identifier) (SRS Identifier))
-> IO
(Either
String (Either (TRS Identifier Identifier) (SRS Identifier)))
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Either
String (Either (TRS Identifier Identifier) (SRS Identifier))
-> IO
(Either
String (Either (TRS Identifier Identifier) (SRS Identifier))))
-> Either
String (Either (TRS Identifier Identifier) (SRS Identifier))
-> IO
(Either
String (Either (TRS Identifier Identifier) (SRS Identifier)))
forall a b. (a -> b) -> a -> b
$ Either (TRS Identifier Identifier) (SRS Identifier)
-> Either
String (Either (TRS Identifier Identifier) (SRS Identifier))
forall a b. b -> Either a b
Right (Either (TRS Identifier Identifier) (SRS Identifier)
-> Either
String (Either (TRS Identifier Identifier) (SRS Identifier)))
-> Either (TRS Identifier Identifier) (SRS Identifier)
-> Either
String (Either (TRS Identifier Identifier) (SRS Identifier))
forall a b. (a -> b) -> a -> b
$ TRS Identifier Identifier
-> Either (TRS Identifier Identifier) (SRS Identifier)
forall a b. a -> Either a b
Left TRS Identifier Identifier
t
String
_ -> do
case Text -> Either SomeException (Problem Identifier Identifier)
readProblemT Text
s of
Right Problem Identifier Identifier
p -> Either String (Either (TRS Identifier Identifier) (SRS Identifier))
-> IO
(Either
String (Either (TRS Identifier Identifier) (SRS Identifier)))
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Either
String (Either (TRS Identifier Identifier) (SRS Identifier))
-> IO
(Either
String (Either (TRS Identifier Identifier) (SRS Identifier))))
-> Either
String (Either (TRS Identifier Identifier) (SRS Identifier))
-> IO
(Either
String (Either (TRS Identifier Identifier) (SRS Identifier)))
forall a b. (a -> b) -> a -> b
$ Either (TRS Identifier Identifier) (SRS Identifier)
-> Either
String (Either (TRS Identifier Identifier) (SRS Identifier))
forall a b. b -> Either a b
Right (Either (TRS Identifier Identifier) (SRS Identifier)
-> Either
String (Either (TRS Identifier Identifier) (SRS Identifier)))
-> Either (TRS Identifier Identifier) (SRS Identifier)
-> Either
String (Either (TRS Identifier Identifier) (SRS Identifier))
forall a b. (a -> b) -> a -> b
$ TRS Identifier Identifier
-> Either (TRS Identifier Identifier) (SRS Identifier)
forall a b. a -> Either a b
Left (TRS Identifier Identifier
-> Either (TRS Identifier Identifier) (SRS Identifier))
-> TRS Identifier Identifier
-> Either (TRS Identifier Identifier) (SRS Identifier)
forall a b. (a -> b) -> a -> b
$ Problem Identifier Identifier -> TRS Identifier Identifier
forall v s. Problem v s -> TRS v s
TPDB.Data.trs Problem Identifier Identifier
p