它似乎没有,但是自己添加该功能并不难。lt
只是 a QuasiQuoter
,它是数据类型:
QuasiQuoter {
quoteExp :: String -> Q Exp
, quotePat :: String -> Q Pat
, quoteType :: String -> Q Type
, quoteDec :: String -> Q [Dec]
}
它们采用String
, 并返回适当的模板 haskell 类型(取决于它使用的上下文。
转换字符串是一件简单的事情,因此它可以像您使用正则表达式描述的那样工作:
stripWhiteSpaceBeforeBackslash :: String -> String
stripWhiteSpaceBeforeBackslash str = subRegex (mkRegex "^[[:space:]]*\\\\") str ""
此外,QuasiQuoter
使用字符串转换函数转换 a 的函数很简单:
transformQuasiQuoter :: (String -> String) -> QuasiQuoter -> QuasiQuoter
transformQuasiQuoter transform quasi = QuasiQuoter {
quoteExp = (quoteExp quasi) . transform
, quotePat = (quotePat quasi) . transform
, quoteType = (quoteType quasi) . transform
, quoteDec = (quoteDec quasi) . transform
}
现在您可以制作一个版本来lt
满足您的需要:
lt_ = transformQuasiQuoter stripWhiteSpaceBeforeBackslash lt
使用它按预期工作:
programName = "SomeProgram"
showVersion _ = "42.42.42"
version = 34
x = [lt_|Usage: #{programName} [OPTIONS...]
\Version #{showVersion version}|]
x
"Usage: SomeProgram [OPTIONS...]\nVersion 42.42.42"
在 ghci 中计算为。