    {-# LANGUAGE Haskell2010 #-}
    module Quasiquoter ( string ) where

    import Language.Haskell.TH.Quote
    import Language.Haskell.TH.Syntax

    -- | Quoter for constructing multiline string literals
    string :: QuasiQuoter
    string :: QuasiQuoter
    string = QuasiQuoter
      { quoteExp :: String -> Q Exp
    quoteExp = forall (f :: * -> *) a. Applicative f => a -> f a
    pure forall b c a. (b -> c) -> (a -> b) -> a -> c
    . Lit -> Exp
    LitE forall b c a. (b -> c) -> (a -> b) -> a -> c
    . String -> Lit
    StringL
      , quotePat :: String -> Q Pat
    quotePat = forall a. String -> Q a
    invalidDomain
      , quoteType :: String -> Q Type
    quoteType = forall a. String -> Q a
    invalidDomain
      , quoteDec :: String -> Q [Dec]
    quoteDec = forall a. String -> Q a
    invalidDomain
      }
      where
        invalidDomain :: String -> Q a
        invalidDomain :: forall a. String -> Q a
    invalidDomain String
    _ = forall (m :: * -> *) a. MonadFail m => String -> m a
    fail String
    "stringQuoter: only valid in expression context"