型宣言の単純なシュガーを定義する quasiquoter を作成しようとしています。これを行う最も簡単な方法は、正規表現を使用して入力テキスト文字列を変更することです。しかし、このコード アウトライン コードをコンパイルすると、次のようになります。
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE QuasiQuotes #-}
import Language.Haskell.TH
import Language.Haskell.TH.Quote
myquote = QuasiQuoter
{ quoteDec = \d -> [d| d |]
}
GHC は次のようなエラーを生成します。
Declaration splices are not permitted inside declaration brackets
これが許可されないのはなぜですか?宣言をスプライスする方法はありますか? 唯一の代替手段は、入力宣言全体を再解析することのようですが、これは不快です。