diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -14,3 +14,4 @@
 * [Brendan Hay](http://github.com/brendanhay)
 * [k0ral](https://github.com/k0ral)
 * [Michael Hatfield](https://github.com/mikehat)
+* [reactormonk](https://github.com/reactormonk)
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,6 @@
+0.2.3.0
+* Add `URI.ByteString.QQ` and the `uri` quasiquoter to be able to express statically known to be valid URIs, e.g. `example = [uri|http://www.example.com|]`. Thanks to [reactormonk](https://github.com/reactormonk).
+
 0.2.2.1
 * Drop dependency on derive in tests.
 
diff --git a/src/URI/ByteString/QQ.hs b/src/URI/ByteString/QQ.hs
new file mode 100644
--- /dev/null
+++ b/src/URI/ByteString/QQ.hs
@@ -0,0 +1,27 @@
+{-# LANGUAGE TemplateHaskell    #-}
+{-# LANGUAGE StandaloneDeriving #-}
+{-# LANGUAGE GADTs              #-}
+{-# LANGUAGE CPP                #-}
+
+module URI.ByteString.QQ where
+
+import Language.Haskell.TH.Quote
+import URI.ByteString
+import Data.ByteString.Char8
+import Instances.TH.Lift()
+
+-- | Allows uri literals via QuasiQuotes language extension.
+--
+-- >>> {-# LANGUAGE QuasiQuotes #-}
+-- >>> stackage :: URI
+-- >>> stackage = [uri|http://stackage.org|]
+uri :: QuasiQuoter
+uri = QuasiQuoter { quoteExp = \s ->
+                      let
+                        parsedURI = either (\err -> error $ show err) id (parseURI laxURIParserOptions (pack s))
+                      in
+                        [| parsedURI |],
+                   quotePat = error "Not implemented.",
+                   quoteType = error "Not implemented.",
+                   quoteDec = error "Not implemented."
+                  }
diff --git a/src/URI/ByteString/Types.hs b/src/URI/ByteString/Types.hs
--- a/src/URI/ByteString/Types.hs
+++ b/src/URI/ByteString/Types.hs
@@ -4,6 +4,11 @@
 {-# LANGUAGE GADTs                      #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE StandaloneDeriving         #-}
+#ifdef LIFT_COMPAT
+{-# LANGUAGE TemplateHaskell            #-}
+#else
+{-# LANGUAGE DeriveLift                 #-}
+#endif
 module URI.ByteString.Types where
 
 -------------------------------------------------------------------------------
@@ -13,21 +18,37 @@
 import           Data.Typeable
 import           Data.Word
 import           GHC.Generics
+import           Instances.TH.Lift()
 -------------------------------------------------------------------------------
 import           Prelude
 -------------------------------------------------------------------------------
-
+#ifdef LIFT_COMPAT
+import           Language.Haskell.TH.Syntax()
+import           Language.Haskell.TH.Lift
+#else
+import           Language.Haskell.TH.Syntax
+#endif
 
 -- | Required first component to referring to a specification for the
 -- remainder of the URI's components, e.g. "http" or "https"
 newtype Scheme = Scheme { schemeBS :: ByteString }
   deriving (Show, Eq, Generic, Typeable, Ord)
 
+#ifdef LIFT_COMPAT
+deriveLift ''Scheme
+#else
+deriving instance Lift Scheme
+#endif
 
 -------------------------------------------------------------------------------
 newtype Host = Host { hostBS :: ByteString }
   deriving (Show, Eq, Generic, Typeable, Ord)
 
+#ifdef LIFT_COMPAT
+deriveLift ''Host
+#else
+deriving instance Lift Host
+#endif
 
 -------------------------------------------------------------------------------
 -- | While some libraries have chosen to limit this to a Word16, the
@@ -35,28 +56,66 @@
 newtype Port = Port { portNumber :: Int }
   deriving (Show, Eq, Generic, Typeable, Ord)
 
+#ifdef LIFT_COMPAT
+deriveLift ''Port
+#else
+deriving instance Lift Port
+#endif
 
 -------------------------------------------------------------------------------
+data UserInfo = UserInfo {
+      uiUsername :: ByteString
+    , uiPassword :: ByteString
+    } deriving (Show, Eq, Generic, Typeable, Ord)
+
+#ifdef LIFT_COMPAT
+deriveLift ''UserInfo
+#else
+deriving instance Lift UserInfo
+#endif
+
+-------------------------------------------------------------------------------
 data Authority = Authority {
       authorityUserInfo :: Maybe UserInfo
     , authorityHost     :: Host
     , authorityPort     :: Maybe Port
     } deriving (Show, Eq, Generic, Typeable, Ord)
 
+#ifdef LIFT_COMPAT
+deriveLift ''Authority
+#else
+deriving instance Lift Authority
+#endif
 
 -------------------------------------------------------------------------------
-data UserInfo = UserInfo {
-      uiUsername :: ByteString
-    , uiPassword :: ByteString
-    } deriving (Show, Eq, Generic, Typeable, Ord)
+newtype Query = Query { queryPairs :: [(ByteString, ByteString)] }
+              deriving (Show, Eq, Monoid, Generic, Typeable, Ord)
 
+#ifdef LIFT_COMPAT
+deriveLift ''Query
+#else
+deriving instance Lift Query
+#endif
 
 -------------------------------------------------------------------------------
-newtype Query = Query { queryPairs :: [(ByteString, ByteString)] }
-              deriving (Show, Eq, Monoid, Generic, Typeable, Ord)
+data Absolute deriving(Typeable)
 
+#ifdef LIFT_COMPAT
+deriveLift ''Absolute
+#else
+deriving instance Lift Absolute
+#endif
 
 -------------------------------------------------------------------------------
+data Relative deriving(Typeable)
+
+#ifdef LIFT_COMPAT
+deriveLift ''Relative
+#else
+deriving instance Lift Relative
+#endif
+
+-------------------------------------------------------------------------------
 -- | Note: URI fragment does not include the #
 data URIRef a where
   URI :: { uriScheme :: Scheme
@@ -75,18 +134,15 @@
 deriving instance Eq (URIRef a)
 -- deriving instance Generic (URIRef a)
 deriving instance Ord (URIRef a)
+#ifdef LIFT_COMPAT
+deriveLift ''URIRef
+#else
+deriving instance Lift (URIRef a)
+#endif
 
 #ifdef WITH_TYPEABLE
 deriving instance Typeable URIRef
 #endif
-
--------------------------------------------------------------------------------
-data Absolute deriving(Typeable)
-
-
--------------------------------------------------------------------------------
-data Relative deriving(Typeable)
-
 
 -------------------------------------------------------------------------------
 type URI = URIRef Absolute
diff --git a/test/URI/ByteStringQQTests.hs b/test/URI/ByteStringQQTests.hs
new file mode 100644
--- /dev/null
+++ b/test/URI/ByteStringQQTests.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE QuasiQuotes         #-}
+
+module URI.ByteStringQQTests (quasiTest) where
+
+import           URI.ByteString.QQ
+import           URI.ByteString
+
+quasiTest :: URI
+quasiTest = [uri|https://stackage.org|]
diff --git a/test/URI/ByteStringTests.hs b/test/URI/ByteStringTests.hs
--- a/test/URI/ByteStringTests.hs
+++ b/test/URI/ByteStringTests.hs
@@ -20,6 +20,7 @@
 import           URI.ByteString
 import           URI.ByteString.Arbitrary ()
 -------------------------------------------------------------------------------
+import           URI.ByteStringQQTests    ()
 
 tests :: TestTree
 tests = testGroup "URI.Bytestring"
diff --git a/uri-bytestring.cabal b/uri-bytestring.cabal
--- a/uri-bytestring.cabal
+++ b/uri-bytestring.cabal
@@ -1,5 +1,5 @@
 name:                uri-bytestring
-version:             0.2.2.1
+version:             0.2.3.0
 synopsis:            Haskell URI parsing as ByteStrings
 description: uri-bytestring aims to be an RFC3986 compliant URI parser that uses efficient ByteStrings for parsing and representing the URI data.
 license:             BSD3
@@ -29,6 +29,7 @@
 library
   exposed-modules:
     URI.ByteString
+    URI.ByteString.QQ
   other-modules:
     URI.ByteString.Lens
     URI.ByteString.Types
@@ -40,6 +41,8 @@
     , base             >= 4.6     && < 4.10
     , bytestring       >= 0.9.1   && < 0.11
     , blaze-builder    >= 0.3.0.0 && < 0.5
+    , template-haskell >= 2.9     && < 2.12
+    , th-lift-instances >= 0.1.8  && < 0.2
     , containers
 
   hs-source-dirs:      src
@@ -48,6 +51,11 @@
   if impl(ghc >= 7.8)
     cpp-options: -DWITH_TYPEABLE
 
+  if impl(ghc < 8)
+    cpp-options: -DLIFT_COMPAT
+    build-depends:
+      th-lift >= 0.7.5 && < 0.8
+
   if flag(lib-Werror)
     ghc-options: -Werror
 
@@ -59,6 +67,7 @@
   other-modules:
     URI.ByteString.Arbitrary
     URI.ByteStringTests
+    URI.ByteStringQQTests
   hs-source-dirs: test
   build-depends:
       uri-bytestring
