on master help sign in
Bring module loading into Idris monad
a3fa5a4David Raymond Christiansen
src/Idris/Chaser.hs+1−1
@@ -82,7 +82,7 @@ buildTree built fp = btree [] fp
82 iLOG $ "CHASING " ++ show file
82 iLOG $ "CHASING " ++ show file
83 ibcsd <- valIBCSubDir i
83 ibcsd <- valIBCSubDir i
84 ids <- allImportDirs
84 ids <- allImportDirs
85− fp <- runIO $ findImport ids ibcsd file
85+ fp <- findImport ids ibcsd file
86 iLOG $ "Found " ++ show fp
86 iLOG $ "Found " ++ show fp
87 mt <- runIO $ getIModTime fp
87 mt <- runIO $ getIModTime fp
88 if (file `elem` built)
88 if (file `elem` built)
src/Idris/IBC.hs+1−1
@@ -300,7 +300,7 @@ pImports fs
300 = do mapM_ (\f -> do i <- getIState
300 = do mapM_ (\f -> do i <- getIState
301 ibcsd <- valIBCSubDir i
301 ibcsd <- valIBCSubDir i
302 ids <- allImportDirs
302 ids <- allImportDirs
303− fp <- runIO $ findImport ids ibcsd f
303+ fp <- findImport ids ibcsd f
304 if (f `elem` imported i)
304 if (f `elem` imported i)
305 then iLOG $ "Already read " ++ f
305 then iLOG $ "Already read " ++ f
306 else do putIState (i { imported = f : imported i })
306 else do putIState (i { imported = f : imported i })
src/Idris/Imports.hs+7−6
@@ -1,6 +1,7 @@
1module Idris.Imports where
1module Idris.Imports where
2
2
3import Idris.AbsSyntax
3import Idris.AbsSyntax
4+import Idris.Error
4
5
5import Idris.Core.TT
6import Idris.Core.TT
6import Paths_idris
7import Paths_idris
@@ -43,15 +44,15 @@ ibcPathWithFallback ibcsd fp = do let ibcp = ibcPath ibcsd True fp
43ibcPathNoFallback :: FilePath -> FilePath -> FilePath
44ibcPathNoFallback :: FilePath -> FilePath -> FilePath
44ibcPathNoFallback ibcsd fp = ibcPath ibcsd True fp
45ibcPathNoFallback ibcsd fp = ibcPath ibcsd True fp
45
46
46−findImport :: [FilePath] -> FilePath -> FilePath -> IO IFileType
47+findImport :: [FilePath] -> FilePath -> FilePath -> Idris IFileType
47−findImport [] ibcsd fp = fail $ "Can't find import " ++ fp
48+findImport [] ibcsd fp = ierror . Msg $ "Can't find import " ++ fp
48findImport (d:ds) ibcsd fp = do let fp_full = d </> fp
49findImport (d:ds) ibcsd fp = do let fp_full = d </> fp
49− ibcp <- ibcPathWithFallback ibcsd fp_full
50+ ibcp <- runIO $ ibcPathWithFallback ibcsd fp_full
50 let idrp = srcPath fp_full
51 let idrp = srcPath fp_full
51 let lidrp = lsrcPath fp_full
52 let lidrp = lsrcPath fp_full
52− ibc <- doesFileExist ibcp
53+ ibc <- runIO $ doesFileExist ibcp
53− idr <- doesFileExist idrp
54+ idr <- runIO $ doesFileExist idrp
54− lidr <- doesFileExist lidrp
55+ lidr <- runIO $ doesFileExist lidrp
55-- when idr $ putStrLn $ idrp ++ " ok"
56-- when idr $ putStrLn $ idrp ++ " ok"
56-- when lidr $ putStrLn $ lidrp ++ " ok"
57-- when lidr $ putStrLn $ lidrp ++ " ok"
57-- when ibc $ putStrLn $ ibcp ++ " ok"
58-- when ibc $ putStrLn $ ibcp ++ " ok"
src/Idris/Parser.hs+2−2
@@ -1169,7 +1169,7 @@ loadModule' outh f
1169 let file = takeWhile (/= ' ') f
1169 let file = takeWhile (/= ' ') f
1170 ibcsd <- valIBCSubDir i
1170 ibcsd <- valIBCSubDir i
1171 ids <- allImportDirs
1171 ids <- allImportDirs
1172− fp <- liftIO $ findImport ids ibcsd file
1172+ fp <- findImport ids ibcsd file
1173 if file `elem` imported i
1173 if file `elem` imported i
1174 then iLOG $ "Already read " ++ file
1174 then iLOG $ "Already read " ++ file
1175 else do putIState (i { imported = file : imported i })
1175 else do putIState (i { imported = file : imported i })
@@ -1219,7 +1219,7 @@ loadSource h lidr f
1219 (mname, imports, pos) <- parseImports f file
1219 (mname, imports, pos) <- parseImports f file
1220 ids <- allImportDirs
1220 ids <- allImportDirs
1221 ibcsd <- valIBCSubDir i
1221 ibcsd <- valIBCSubDir i
1222− mapM_ (\f -> do fp <- runIO $ findImport ids ibcsd f
1222+ mapM_ (\f -> do fp <- findImport ids ibcsd f
1223 case fp of
1223 case fp of
1224 LIDR fn -> ifail $ "No ibc for " ++ f
1224 LIDR fn -> ifail $ "No ibc for " ++ f
1225 IDR fn -> ifail $ "No ibc for " ++ f
1225 IDR fn -> ifail $ "No ibc for " ++ f