-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Chris Done's path library, enriched with URL-related goodies.
--   
--   Chris Done's path library, enriched with URL-related goodies.
@package path-extra
@version 0.0.6

module Path.Extended

-- | A location for some base and type - internally uses <tt>Path</tt>.
data Location b t
Location :: Int -> Path b t -> Maybe String -> [QueryParam] -> Maybe String -> Location b t

-- | only when b ~ Rel
[locParentJumps] :: Location b t -> Int
[locPath] :: Location b t -> Path b t

-- | only when t ~ File
[locFileExt] :: Location b t -> Maybe String
[locQueryParams] :: Location b t -> [QueryParam]
[locFragment] :: Location b t -> Maybe String
type QueryParam = (String, Maybe String)

-- | Convenience typeclass for symbolic, stringless routes - make an
--   instance for your own data type to use your constructors as
--   route-referencing symbols.
class ToPath sym base type' | sym -> base type'
toPath :: (ToPath sym base type', MonadThrow m) => sym -> m (Path base type')

-- | Convenience typeclass for symbolic, stringless routes - make an
--   instance for your own data type to use your constructors as
--   route-referencing symbols.
class ToLocation sym base type' | sym -> base type'
toLocation :: (ToLocation sym base type', MonadThrow m) => sym -> m (Location base type')
class PathAppend right base type'
(</>) :: PathAppend right base type' => Path base Dir -> right Rel type' -> right base type'

-- | Prepend a parental accessor path - <tt>../</tt>
addParent :: Location Rel t -> Location Rel t
delParent :: Location Rel t -> Location Rel t

-- | This should be your entry point for creating a <tt>Location</tt>.
fromPath :: Path b t -> Location b t
setFileExt :: Maybe String -> Location b File -> Location b File
addFileExt :: String -> Location b File -> Location b File
delFileExt :: Location b File -> Location b File
getFileExt :: Location b File -> Maybe String
setQuery :: [QueryParam] -> Location b t -> Location b t

-- | Appends a query parameter
addQuery :: QueryParam -> Location b t -> Location b t
(<&>) :: Location b t -> QueryParam -> Location b t
infixl 7 <&>
addQueries :: [QueryParam] -> Location b t -> Location b t
delQuery :: Location b t -> Location b t
getQuery :: Location b t -> [QueryParam]
setFragment :: Maybe String -> Location b t -> Location b t
addFragment :: String -> Location b t -> Location b t
(<#>) :: Location b t -> String -> Location b t
infixl 8 <#>
delFragment :: Location b t -> Location b t
getFragment :: Location b t -> Maybe String
instance GHC.Classes.Ord (Path.Extended.Location b t)
instance GHC.Classes.Eq (Path.Extended.Location b t)
instance Path.Extended.PathAppend Path.Extended.Location Path.Abs Path.Dir
instance Path.Extended.PathAppend Path.Extended.Location Path.Abs Path.File
instance Path.Extended.PathAppend Path.Extended.Location Path.Rel Path.Dir
instance Path.Extended.PathAppend Path.Extended.Location Path.Rel Path.File
instance GHC.Show.Show (Path.Extended.Location b t)
instance Path.Extended.PathAppend Path.Internal.Path Path.Abs Path.Dir
instance Path.Extended.PathAppend Path.Internal.Path Path.Abs Path.File
instance Path.Extended.PathAppend Path.Internal.Path Path.Rel Path.Dir
instance Path.Extended.PathAppend Path.Internal.Path Path.Rel Path.File
