@@ -4,20 +4,24 @@ import TutorialD.Interpreter.Import.Base
44import TutorialD.Interpreter.Base
55import TutorialD.Interpreter.DatabaseExpr
66import Text.Parsec.String
7−import Text.Parsec
7+import Text.Parsec hiding (try)
88import ProjectM36.Error
99import Data.Either
1010import qualified Data.Text as T
11+import Control.Exception
1112--import a file containing TutorialD database context expressions
1213
1314importTutorialD :: FilePath -> DatabaseContext -> IO (Either RelationalError DatabaseExpr)
1415importTutorialD pathIn _ = do
15− tutdData <- readFile pathIn
16− let dbexprsErr = map (parse databaseExprP "") (lines tutdData)
17− errs = lefts dbexprsErr
18− case errs of
19− err:_ -> return $ Left (ParseError (T.pack (show err)))
20− [] -> return $ Right (MultipleExpr (rights dbexprsErr))
16+ tutdData <- try (readFile pathIn) :: IO (Either IOError String)
17+ case tutdData of
18+ Left err -> return $ Left (ImportError $ T.pack (show err))
19+ Right tutdData' -> do
20+ let dbexprsErr = map (parse databaseExprP "") (lines tutdData')
21+ errs = lefts dbexprsErr
22+ case errs of
23+ err2:_ -> return $ Left (ParseError (T.pack (show err2)))
24+ [] -> return $ Right (MultipleExpr (rights dbexprsErr))
2125
2226tutdImportP :: Parser DataImportOperator
2327tutdImportP = do