module Web.Routes.Nested.Types.UrlChunks where
import Data.Attoparsec.Text
import Text.Regex
import qualified Data.Text as T
data EitherUrlChunk (x :: Maybe *) where
(:=) :: T.Text -> EitherUrlChunk 'Nothing
(:~) :: (T.Text, Parser r) -> EitherUrlChunk ('Just r)
(:*) :: (T.Text, Regex) -> EitherUrlChunk ('Just [String])
l :: T.Text -> EitherUrlChunk 'Nothing
l = (:=)
p :: (T.Text, Parser r) -> EitherUrlChunk ('Just r)
p = (:~)
r :: (T.Text, Regex) -> EitherUrlChunk ('Just [String])
r = (:*)
data UrlChunks (xs :: [Maybe *]) where
Cons :: EitherUrlChunk mx -> UrlChunks xs -> UrlChunks (mx ': xs)
Root :: UrlChunks '[]
(</>) :: EitherUrlChunk mx -> UrlChunks xs -> UrlChunks (mx ': xs)
(</>) = Cons
infixr 9 </>
o :: UrlChunks '[]
o = Root