import Monad
\end{code}
+The Finder provides a thin filesystem abstraction to the rest of the
+compiler. For a given module, it knows (a) which package the module
+lives in, so it can make a Module from a ModuleName, and (b) where the
+source, interface, and object files for a module live.
+
\begin{code}
type Finder = ModuleName -> IO (Maybe (Module, ModuleLocation))
+-- For a module in another package, the hs_file and obj_file
+-- components of ModuleLocation are undefined.
+
+-- The locations specified by a ModuleLocation may or may not
+-- correspond to actual files yet: for example, even if the object
+-- file doesn't exist, the ModuleLocation still contains the path to
+-- where the object file will reside if/when it is created.
+
data ModuleLocation
= ModuleLocation {
hs_file :: FilePath,