{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE CPP #-} module URI.ByteString.QQ ( uri , relativeRef ) 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." } ------------------------------------------------------------------------------- -- | Allows relative ref literals via QuasiQuotes language extension. -- -- >>> {-# LANGUAGE QuasiQuotes #-} -- >>> ref :: RelativeRef -- >>> ref = [relativeRef|/foo?bar=baz#quux|] relativeRef :: QuasiQuoter relativeRef = QuasiQuoter { quoteExp = \s -> let parsedURI = either (\err -> error $ show err) id (parseRelativeRef laxURIParserOptions (pack s)) in [| parsedURI |], quotePat = error "Not implemented.", quoteType = error "Not implemented.", quoteDec = error "Not implemented." }