foundation-0.0.15: Alternative prelude with batteries and no dependencies

Safe HaskellNone







class Path path where #

Path type class

defines the Path associated types and basic functions to implement related to the path manipulation

# TODO, add missing enhancement:

splitExtension :: PathEnt path -> (PathEnt path, PathEnt path)
addExtension  :: PathEnt path -> PathEnt path -> PathEnt path
(.) :: path -> PathEnt path -> path
(-.) :: path -> PathEnt path -> path

Minimal complete definition

(</>), splitPath, buildPath

Associated Types

type PathEnt path #

the associated PathEntity of the given path this type is the minimal element contained in the Path a Path is not a collection but it is possible to see this associated type equivalent to the Element type family

type PathPrefix path #

the associated prefix of the given path

in the case of a FilePath, it is a void (i.e. `()`) in the case of a URI, it is the schema, host, port...

type PathSuffix path #

the associated suffix of the given path

in the case of the FilePath, it is a void (i.e. `()`) in the case of the URI, it is a the query, the fragment


(</>) :: path -> PathEnt path -> path #

join a path entity to a given path

splitPath :: path -> (PathPrefix path, [PathEnt path], PathSuffix path) #

split the path into the associated elements

buildPath :: (PathPrefix path, [PathEnt path], PathSuffix path) -> path #

build the path from the associated elements

filename :: (Path path, Monoid (PathEnt path)) => path -> PathEnt path #

get the filename of the given path

If there is no filename, you will receive the mempty of the PathEnt

>>> filename ("foo.hs" :: FilePath)
>>> filename ("foo/bar/baz.hs" :: FilePath)

parent :: Path path => path -> path #

parent is only going to drop the filename.

if you actually want to reference to the parent directory, simply uses:

parent "." = "." <> ".."
>>> parent ("foo.hs" :: FilePath)
>>> parent ("foo/bar/baz.hs" :: FilePath)

prefix :: Path path => path -> PathPrefix path #

get the path prefix information

>>> prefix ("/home/tab" :: FilePath)
>>> prefix ("home/tab" :: FilePath)

or for URI (TODO, not yet accurate)

prefix ""
   == URISchema http Nothing Nothing "" Nothing

suffix :: Path path => path -> PathSuffix path #

get the path suffix information

>>> suffix ("/home/tab" :: FilePath)

or for URI (TODO, not yet accurate)

suffix ""
   == URISuffix (["w", "1"], Nothing)


data FilePath #

FilePath is a collection of FileName

TODO: Eq and Ord are implemented using Show This is not very efficient and would need to be improved Also, it is possible the ordering is not necessary what we want in this case.

A FilePath is one of the following:

  • An Absolute:
  • starts with one of the follwing "/"
  • A relative:
  • don't start with a "/"
  • authorised:
  • "/"
  • "filepath"
  • "."
  • ".."
  • "workhaskellhs-foundation"
  • unauthorised
  • "path//"

data FileName #

A filename (or path entity) in the FilePath

  • Authorised
  • ""
  • "."
  • ".."
  • "foundation"
  • Unauthorised
  • "/"
  • "file/"
  • "/file"
  • "file/path"


filePathToLString :: FilePath -> [Char] #

conversion of a FilePath into a list of Char

this function may throw exceptions