mkQQ :: String -> (String -> Q Exp) -> QuasiQuoter
mkQQ qqName mkExp =  QuasiQuoter
  { quoteExp  = mkExp
  , quotePat  = \_ -> fail $ "Cannot use " ++ qqName ++ " in patterns"
  , quoteType = \_ -> fail $ "Cannot use " ++ qqName ++ " in type"
  , quoteDec  = \_ -> fail $ "Cannot use " ++ qqName ++ " in declarations"
  }
mkQQ :: String -> (String -> Q Exp) -> QuasiQuoter
mkQQ qqName mkExp =  QuasiQuoter
  { quoteExp  = mkExp
  , quotePat  = \_ -> fail $ "Cannot use " ++ qqName ++ " in patterns"
  , quoteType = \_ -> fail $ "Cannot use " ++ qqName ++ " in type"
  , quoteDec  = \_ -> fail $ "Cannot use " ++ qqName ++ " in declarations"
  }
mkQQ qqName mkExp =  QuasiQuoter
  { quoteExp  = mkExp
  , quotePat  = \_ -> fail $ "Cannot use " ++ qqName ++ " in patterns"
  , quoteType = \_ -> fail $ "Cannot use " ++ qqName ++ " in type"
  , quoteDec  = \_ -> fail $ "Cannot use " ++ qqName ++ " in declarations"
  }