+-- getImportsFromFile is careful to close the file afterwards, otherwise
+-- we can end up with a large number of open handles before the garbage
+-- collector gets around to closing them.
+getImportsFromFile :: String -> IO ([ModuleName], [ModuleName], ModuleName)
+getImportsFromFile filename
+ = do hdl <- openFile filename ReadMode
+ modsrc <- hGetContents hdl
+ let (srcimps,imps,mod_name) = getImports modsrc
+ length srcimps `seq` length imps `seq` return ()
+ hClose hdl
+ return (srcimps,imps,mod_name)