data PathRoot = UnixFilesystemRoot | WindowsDrive Char | SMBShare String String | VMSDevice String | ... -- whatever else we need
class (Show p) => Path p where isAbsolute :: p -> Bool isRelative :: p -> Bool isRelative = not . isAbsolute basename :: p -> String parent :: p -> p pathAppend :: p -> p -> p -- 2nd arg must be a relative path pathSeparator :: p -> Char pathParser :: Parser p -- parsec parser parsePath :: String -> p parsePath str = case parse pathParser "" str of Left e = error (Show e) Right p = p
Other operations I think might be worthwhile:
pathRoot :: p -> Maybe PathRoot -- relative paths return Nothing
pathCleanup :: p -> p -- remove .. and suchlike
commonAncestors :: p -> p -> p
pathFrom :: p -> p -> p -- returns a relative path from the 1st to the 2nd
pathCompare :: p -> p -> ??? -- not sure what this should mean or return
hasExtension :: p -> String -> Bool
pathToForeign :: p -> IO (Ptr CChar)
pathFromForeign :: Ptr CChar -> IO p
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe