-- |
-- 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