表示されませんが、機能を自分で追加するのは難しくありません。lt
は単なる であり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 で評価されます。