diff --git a/nested-routes.cabal b/nested-routes.cabal
--- a/nested-routes.cabal
+++ b/nested-routes.cabal
@@ -1,5 +1,5 @@
 Name:                   nested-routes
-Version:                0.2
+Version:                0.2.0.1
 Author:                 Athan Clark <athan.clark@gmail.com>
 Maintainer:             Athan Clark <athan.clark@gmail.com>
 License:                BSD3
@@ -15,6 +15,7 @@
   GHC-Options:          -Wall
   Exposed-Modules:      Web.Routes.Nested
                         Web.Routes.Nested.Types
+                        Web.Routes.Nested.Types.UrlChunks
                         Web.Routes.Nested.VerbListener
                         Web.Routes.Nested.FileExtListener
   Build-Depends:        base >= 4 && < 5
diff --git a/src/Web/Routes/Nested/Types/UrlChunks.hs b/src/Web/Routes/Nested/Types/UrlChunks.hs
new file mode 100644
--- /dev/null
+++ b/src/Web/Routes/Nested/Types/UrlChunks.hs
@@ -0,0 +1,45 @@
+{-# LANGUAGE
+    KindSignatures
+  , GADTs
+  , RankNTypes
+  , TypeOperators
+  , DataKinds
+  #-}
+
+module Web.Routes.Nested.Types.UrlChunks where
+
+import Data.Attoparsec.Text
+import qualified Data.Text as T
+
+
+-- | Constrained to AttoParsec & T.Text
+data EitherUrlChunk (x :: Maybe *) where
+  (:=) :: T.Text             -> EitherUrlChunk 'Nothing
+  (:~) :: (T.Text, Parser r) -> EitherUrlChunk ('Just r)
+
+-- | Container when defining route paths
+data UrlChunks (xs :: [Maybe *]) where
+  Cons :: EitherUrlChunk mx -> UrlChunks xs -> UrlChunks (mx ': xs) -- unpacks left-to-right
+  Root  :: UrlChunks '[]
+
+-- `foldChunks :: (forall mx. EitherUrlChunk mx -> acc -> acc) -> acc -> UrlChunks xs -> acc
+-- `foldChunks f i Root = i
+-- `foldChunks f i (Cons u us) = foldChunks f (f u i) us
+-- `
+-- `appendChunks :: UrlChunks xs -> UrlChunks ys -> UrlChunks (xs :++ ys)
+-- `appendChunks Root ys = ys
+-- `appendChunks (Cons x xs) ys = Cons x $ appendChunks xs ys
+-- `
+-- `lastChunk :: UrlChunks xs -> EitherUrlChunk (Last xs)
+-- `lastChunk (Cons u Root) = u
+-- `lastChunk (Cons u us)   = lastChunk us
+-- `
+-- `initChunks :: UrlChunks xs -> UrlChunks (Init xs)
+-- `initChunks (Cons u Root) = Root
+-- `initChunks (Cons u us)   = Cons u $ initChunks us
+
+(</>) = Cons
+
+infixr 8 </>
+
+(#) = Root
