heredoc-0.1.0.0: src/Text/Here.hs
module Text.Here (here, there) where
import Language.Haskell.TH
( litE
, stringL
)
import Language.Haskell.TH.Quote
( QuasiQuoter
( QuasiQuoter
, quoteExp
, quotePat
, quoteType
, quoteDec
)
, quoteFile
)
err :: String -> String
err ctx =
"You have used the `here` QuasiQuoter in a " ++ ctx ++ " context; " ++
"you must only use it as a string literal expression"
-- | Create a string-literal expression from the string being quoted.
here :: QuasiQuoter
here = QuasiQuoter
{ quoteExp = litE . stringL
, quotePat = const $ error $ err "pattern"
, quoteType = const $ error $ err "type"
, quoteDec = const $ error $ err "declaration"
}
-- | Create a string-literal expression from
-- the contents of the file at the filepath being quoted.
there :: QuasiQuoter
there = quoteFile here