@@ -24,7 +24,7 @@ import Data.Either
24import Debug.Trace
24import Debug.Trace
26import Util.Pretty
26import Util.Pretty
29getContext :: Idris Context
29getContext :: Idris Context
30getContext = do i <- getIState; return (tt_ctxt i)
30getContext = do i <- getIState; return (tt_ctxt i)
@@ -41,13 +41,15 @@ getLibs = do i <- getIState; return (idris_libs i)
41addLib :: String -> Idris ()
41addLib :: String -> Idris ()
42addLib f = do i <- getIState; putIState $ i { idris_libs = f : idris_libs i }
42addLib f = do i <- getIState; putIState $ i { idris_libs = f : idris_libs i }
44−addDyLib :: String -> Idris ()
44+addDyLib :: [String] -> Idris (Either DynamicLib String)
45−addDyLib lib = do i <- getIState
45+addDyLib libs = do i <- getIState
46− handle <- lift $ tryLoadLib lib
46+ handle <- lift $ mapM (\l -> catchIO (tryLoadLib l) (\_ -> return Nothing)) libs
47− case handle of
47+ case msum handle of
48− Nothing -> fail $ "Could not load dynamic lib \"" ++ lib ++ "\""
48+ Nothing -> return (Right $ "Could not load dynamic alternatives \"" ++
49+ concat (intersperse "," libs) ++ "\"")
49− Just x -> do let libs = idris_dynamic_libs i
50+ Just x -> do let ls = idris_dynamic_libs i
50− putIState $ i { idris_dynamic_libs = x:libs }
51+ putIState $ i { idris_dynamic_libs = x:ls }
52addHdr :: String -> Idris ()
54addHdr :: String -> Idris ()
53addHdr f = do i <- getIState; putIState $ i { idris_hdrs = f : idris_hdrs i }
55addHdr f = do i <- getIState; putIState $ i { idris_hdrs = f : idris_hdrs i }