uri-bytestring-0.2.3.1: src/URI/ByteString/QQ.hs
{-# 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."
}