1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
module MultilineTh (multiline) where
import qualified Data.Text as T
import Language.Haskell.TH
import Language.Haskell.TH.Quote
import Language.Haskell.TH.Syntax
import Prelude
multiline :: QuasiQuoter
multiline = QuasiQuoter
{ quoteExp = quoteUnlines
, quotePat = const badUse
, quoteType = const badUse
, quoteDec = const badUse
}
where
badUse = fail "multiline quasiquoter can only be used as an expression"
quoteUnlines :: String -> Q Exp
quoteUnlines =
liftString
. T.unpack
. T.unwords
. filter (not . T.null)
. T.words
. T.pack
|