printfQ
最近、次のコードのように、アンチクォート機能を備えた quasiquoter を実装する方法を学びました。
main = do
let itemName = "apple"
price = 1.29
[printfQ| The price of #{itemName} is #{price}. |]
quasiquote の成分文字列が に渡されquoteExp printfQ :: String -> ExpQ
ます。したがって、与えられた を解析し、埋め込む名前とString
を見つけ、各名前に適用し、 を構築します。"itemName"
"price"
varE . mkName
ExpQ
これを拡張しprintfQ
て、次のように式の埋め込みを許可するとします。
[printfQ| The price of #{itemNames !! i} is #{price + taxOf price}. |]
"itemNames !! i"
2 つの文字列とを検出するパーサーを作成できます"price + taxOf price"
。しかし、さらに強力なバージョンの が必要です。これは、これらの文字列をに変換するvarE . mkName
型の関数であり、使用されている名前空間を参照する式として解釈します。String -> ExpQ
ExpQ
printfQ
私の質問:この文字列を AST に変換するライブラリ関数はありますか? これを行う簡単な方法はありますか、それとも Haskell パーサー全体を作成する必要がありますか?
- この質問は、この質問と密接に関連していますIs there a template haskell function for quoteing? より焦点を絞った明確な方法で質問を述べることが、コミュニティが答えを見つけるのに役立つことを期待して、これを投稿しています.