@@ -24,7 +24,7 @@ import Data.Either
2424import Debug.Trace
2525
2626import Util.Pretty
27−
27+import Util.System
2828
2929getContext :: Idris Context
3030getContext = do i <- getIState; return (tt_ctxt i)
@@ -41,13 +41,15 @@ getLibs = do i <- getIState; return (idris_libs i)
4141addLib :: String -> Idris ()
4242addLib f = do i <- getIState; putIState $ i { idris_libs = f : idris_libs i }
4343
44−addDyLib :: String -> Idris ()
45−addDyLib lib = do i <- getIState
46− handle <- lift $ tryLoadLib lib
47− case handle of
48− Nothing -> fail $ "Could not load dynamic lib \"" ++ lib ++ "\""
49− Just x -> do let libs = idris_dynamic_libs i
50− putIState $ i { idris_dynamic_libs = x:libs }
44+addDyLib :: [String] -> Idris (Either DynamicLib String)
45+addDyLib libs = do i <- getIState
46+ handle <- lift $ mapM (\l -> catchIO (tryLoadLib l) (\_ -> return Nothing)) libs
47+ case msum handle of
48+ Nothing -> return (Right $ "Could not load dynamic alternatives \"" ++
49+ concat (intersperse "," libs) ++ "\"")
50+ Just x -> do let ls = idris_dynamic_libs i
51+ putIState $ i { idris_dynamic_libs = x:ls }
52+ return (Left x)
5153
5254addHdr :: String -> Idris ()
5355addHdr f = do i <- getIState; putIState $ i { idris_hdrs = f : idris_hdrs i }