1

型宣言の単純なシュガーを定義する 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

これが許可されないのはなぜですか?宣言をスプライスする方法はありますか? 唯一の代替手段は、入力宣言全体を再解析することのようですが、これは不快です。

4

1 に答える 1

2

haskell-src-metaparseDecs :: String -> Either String [Dec]その解析を行う必要があります。

于 2013-09-03T02:17:07.490 に答える