    -- |
    -- Module      : Foundation.VFS.URI
    -- License     : BSD-style
    -- Maintainer  : foundation
    -- Stability   : experimental
    -- Portability : portable
    --

    module Foundation.VFS.URI
        ( URI(..)
        , URISchema(..)
        , URIAuthority(..)
        , URIQuery(..)
        , URIFragment(..)
        , URIPath(..)
        ) where

    import Basement.Compat.Base
    import Foundation.VFS.Path(Path(..))

    -- ------------------------------------------------------------------------- --
    --                                URI                                        --
    -- ------------------------------------------------------------------------- --

    -- | TODO this is not implemented yet
    data URI = URI
    data URISchema = URISchema
    data URIAuthority = URIAuthority
    data URIQuery = URIQuery
    data URIFragment = URIFragment
    data URIPath = URIPath
    instance Path URI where
        type PathEnt URI = URIPath
        type PathPrefix URI = (URISchema, URIAuthority)
        type PathSuffix URI = (URIQuery, URIFragment)
        </> :: URI -> PathEnt URI -> URI
    (</>) = URI -> PathEnt URI -> URI
    URI -> URIPath -> URI
    forall a. HasCallStack => a
    undefined
        splitPath :: URI -> (PathPrefix URI, [PathEnt URI], PathSuffix URI)
    splitPath = URI
    -> ((URISchema, URIAuthority), [URIPath], (URIQuery, URIFragment))
    URI -> (PathPrefix URI, [PathEnt URI], PathSuffix URI)
    forall a. HasCallStack => a
    undefined
        buildPath :: (PathPrefix URI, [PathEnt URI], PathSuffix URI) -> URI
    buildPath = ((URISchema, URIAuthority), [URIPath], (URIQuery, URIFragment))
    -> URI
    (PathPrefix URI, [PathEnt URI], PathSuffix URI) -> URI
    forall a. HasCallStack => a
    undefined