Copyright | (c) 2023 Composewell Technologies |
---|---|
License | BSD3 |
Maintainer | streamly@composewell.com |
Portability | GHC |
Safe Haskell | None |
Language | Haskell2010 |
Streamly.Internal.FileSystem.PosixPath.Seg
Description
This module provides a type safe path append operation by distinguishing
paths between rooted paths and branches. Rooted paths are represented by the
Rooted PosixPath
type and branches are represented by the Unrooted PosixPath
type. Rooted paths are paths that are attached to specific roots in the file
system. Rooted paths could be absolute or relative e.g. /usr/bin
,
./local/bin
, or .
. Unrootedes are a paths that are not attached to a
specific root e.g. usr/bin
, local/bin
, or ../bin
are branches.
This distinction provides a safe path append operation which cannot fail. These types do not allow appending a rooted path to any other path. Only branches can be appended.
Types
Constructors
Rooted a |
Constructors
Unrooted a |
Constraint to check if a type has Rooted or Unrooted annotations.
Instances
IsSeg (Rooted a) Source # | |
Defined in Streamly.Internal.FileSystem.PosixPath.Seg | |
IsSeg (Unrooted a) Source # | |
Defined in Streamly.Internal.FileSystem.PosixPath.Seg |
Statically Verified Path Literals
Quasiquoters.
rt :: QuasiQuoter Source #
Generates a Rooted Path
type from a quoted literal.
>>>
Path.toString (Path.toPath ([rt|/usr|] :: Rooted PosixPath))
"/usr"
ur :: QuasiQuoter Source #
Generates a Unrooted Path
type from a quoted literal.
>>>
Path.toString (Path.toPath ([ur|usr|] :: Unrooted PosixPath))
"usr"
Statically Verified Path Strings
Template Haskell expression splices.