diff --git a/path-extra.cabal b/path-extra.cabal
--- a/path-extra.cabal
+++ b/path-extra.cabal
@@ -1,5 +1,5 @@
 Name:                   path-extra
-Version:                0.0.2
+Version:                0.0.3
 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:      Path.Extended
   Build-Depends:        base >= 4.6 && < 5
+                      , exceptions
                       , path
 
 Source-Repository head
diff --git a/src/Path/Extended.hs b/src/Path/Extended.hs
--- a/src/Path/Extended.hs
+++ b/src/Path/Extended.hs
@@ -1,31 +1,37 @@
 {-# LANGUAGE
     MultiParamTypeClasses
+  , FunctionalDependencies
   #-}
 
 module Path.Extended
   ( -- * Types
     Location
   , QueryParam
-    -- * Combinators
-    -- ** Parent Accessors
-  , addParent
+  , -- * Classes
+    ToPath (..)
+  , ToLocation (..)
+  , -- * Combinators
+    -- ** Append
+    PathAppend (..)
+  , -- ** Parent Accessors
+    addParent
   , delParent
-    -- ** Path
-  , fromPath
-    -- ** File Extensions
-  , setFileExt
+  , -- ** Path
+    fromPath
+  , -- ** File Extensions
+    setFileExt
   , addFileExt
   , delFileExt
   , getFileExt
-    -- ** Query Parameters
-  , setQuery
+  , -- ** Query Parameters
+    setQuery
   , addQuery
   , (<&>)
   , addQueries
   , delQuery
   , getQuery
-    -- ** Fragment
-  , setFragment
+  , -- ** Fragment
+    setFragment
   , addFragment
   , (<#>)
   , delFragment
@@ -36,10 +42,22 @@
 import qualified Path as P ((</>))
 
 import Data.List (intercalate)
+import Control.Monad.Catch
 
 
 class PathAppend right base type' where
   (</>) :: Path base Dir -> right Rel type' -> right base type'
+
+
+-- | Convenience typeclass for symbolic, stringless routes - make an instance
+-- for your own data type to use your constructors as route-referencing symbols.
+class ToPath sym base type' | sym -> base type' where
+  toPath :: MonadThrow m => sym -> m (Path base type')
+
+-- | Convenience typeclass for symbolic, stringless routes - make an instance
+-- for your own data type to use your constructors as route-referencing symbols.
+class ToLocation sym base type' | sym -> base type' where
+  toLocation :: MonadThrow m => sym -> m (Location base type')
 
 
 -- | A location for some base and type - internally uses @Path@.
