CurryInfo: currypath-3.0.0 / System.CurryPath.curryModulesInDirectory

definition:
 
curryModulesInDirectory :: String -> IO [String]
curryModulesInDirectory dir = getModules "" dir
 where
  getModules p d = do
    exdir <- doesDirectoryExist d
    entries <- if exdir then getDirectoryContents d else return []
    let realentries = filter (\f -> length f >= 1 && head f /= '.') entries
        newprogs    = filter isCurryFile realentries
    subdirs <- mapM (\e -> do b <- doesDirectoryExist (d </> e)
                              return $ if b then [e] else [])
                    realentries
               >>= return . concat
    subdirentries <- mapM (\s -> getModules (p ++ s ++ ".") (d </> s)) subdirs
    return $ map ((p ++) . stripCurrySuffix) newprogs ++ concat subdirentries

  isCurryFile f = takeExtension f `elem` [".curry",".lcurry"]
demand:
 no demanded arguments
deterministic:
 deterministic operation
documentation:
 
---------------------------------------------------------------------------
Gets the names of all Curry modules contained in a given directory.
Modules in subdirectories are returned as hierarchical module names.
failfree:
 <FAILING>
indeterministic:
 referentially transparent operation
infix:
 no fixity defined
iotype:
 {(_) |-> _}
name:
 curryModulesInDirectory
precedence:
 no precedence defined
result-values:
 _
signature:
 String -> Prelude.IO [String]
solution-complete:
 operation might suspend on free variables
terminating:
 possibly non-terminating
totally-defined:
 possibly non-reducible on same data term