iri-0.5.1.2: library/Iri/QuasiQuoter.hs
module Iri.QuasiQuoter
( uri,
httpUri,
iri,
httpIri,
)
where
import qualified Data.Attoparsec.ByteString as B
import qualified Data.Attoparsec.Text as C
import qualified Iri.Parsing.Attoparsec.ByteString as A
import qualified Iri.Parsing.Attoparsec.Text as D
import Iri.Prelude hiding (exp)
import Language.Haskell.TH.Quote
import Language.Haskell.TH.Syntax
exp :: (String -> Q Exp) -> QuasiQuoter
exp exp =
QuasiQuoter exp unsupported unsupported unsupported
where
unsupported _ =
fail "Not supported"
-- |
-- 'Iri' literal from ASCII representation.
uri :: QuasiQuoter
uri =
exp $ \string ->
case B.parseOnly (A.uri <* B.endOfInput) (fromString string) of
Right uri -> lift uri
Left error -> fail (showString "URI parsing: " error)
-- |
-- 'HttpIri' literal from ASCII representation.
httpUri :: QuasiQuoter
httpUri =
exp $ \string ->
case B.parseOnly (A.httpUri <* B.endOfInput) (fromString string) of
Right uri -> lift uri
Left error -> fail (showString "HTTP URI parsing: " error)
-- |
-- 'Iri' literal from IRI representation.
iri :: QuasiQuoter
iri =
exp $ \string ->
case C.parseOnly (D.iri <* C.endOfInput) (fromString string) of
Right iri -> lift iri
Left error -> fail (showString "IRI parsing: " error)
-- |
-- 'HttpIri' literal from IRI representation.
httpIri :: QuasiQuoter
httpIri =
exp $ \string ->
case C.parseOnly (D.httpIri <* C.endOfInput) (fromString string) of
Right iri -> lift iri
Left error -> fail (showString "HTTP IRI parsing: " error)