@@ -22,6 +22,7 @@ import Control.Monad.State
2222import Data.List
2323import Data.Char
2424import Data.Either
25+import Data.Maybe
2526
2627import Debug.Trace
2728
@@ -54,13 +55,21 @@ addFlag tgt f = do i <- getIState; putIState $ i { idris_cgflags = nub $ (tgt, f
5455
5556addDyLib :: [String] -> Idris (Either DynamicLib String)
5657addDyLib libs = do i <- getIState
57− handle <- lift $ mapM (\l -> catchIO (tryLoadLib l) (\_ -> return Nothing)) libs
58− case msum handle of
59− Nothing -> return (Right $ "Could not load dynamic alternatives \"" ++
60− concat (intersperse "," libs) ++ "\"")
61− Just x -> do let ls = idris_dynamic_libs i
62− putIState $ i { idris_dynamic_libs = x:ls }
63− return (Left x)
58+ let ls = idris_dynamic_libs i
59+ case mapMaybe (findDyLib ls) libs of
60+ x:_ -> return (Left x)
61+ [] -> do
62+ handle <- lift $ mapM (\l -> catchIO (tryLoadLib l) (\_ -> return Nothing)) $ libs
63+ case msum handle of
64+ Nothing -> return (Right $ "Could not load dynamic alternatives \"" ++
65+ concat (intersperse "," libs) ++ "\"")
66+ Just x -> do putIState $ i { idris_dynamic_libs = x:ls }
67+ return (Left x)
68+ where findDyLib :: [DynamicLib] -> String -> Maybe DynamicLib
69+ findDyLib [] l = Nothing
70+ findDyLib (lib:libs) l | l == lib_name lib = Just lib
71+ | otherwise = findDyLib libs l
72+
6473
6574addHdr :: Codegen -> String -> Idris ()
6675addHdr tgt f = do i <- getIState; putIState $ i { idris_hdrs = nub $ (tgt, f) : idris_hdrs i }