Template Haskellと準クォートの違いがわからないというか全体的にぼやけた理解というかあまり理解していなかった(THの説明見ているとTH=QQみたいな印象を持ってしまうので区別がつかない)ので、3連休の最終日はTHってた。
ちょっと前にモナド内包表記で遊んでいたので、
[|...|]
とかいう記法はなんかの型に入っているイメージが湧いてくる。
- Template Haskell とは、Haskell でコンパイル時メタプログラミングを行うための仕組み
- [$foo| ... |] が準クォート記号で、foo が囲まれた部分を処理するパーサーになります。クォートではなく、準クォートと呼ばれるのは、内部の変数を展開できるからです
- Template Haskell の準クォートって「括った部分を文字列としてまるっと渡すから自前でパーサ書いてね!」って仕組み
要するにLispに例えるとTemplate Haskellはマクロで準クォートがリーダーマクロだという感じの理解で良いのだろうかね。