4

私のモジュールには定義が含まれており、その一部は(module節で)エクスポートされます。Template Haskell で生成された宣言もエクスポートしたいと考えています。しかし、moduleTH で句を変更する方法がないように見えるので、これを行うことはできません。

TH で生成された宣言をエクスポートするように指定することはできますか? または、これを行う他の方法がありますか?

4

1 に答える 1

7

生成された TH 宣言の名前をエクスポートする必要があります。たとえば、data B = C | D宣言を生成する TH 関数がある場合は、単純に export する必要がありますmodule Mymodule (B(C,D)) where ...

エクスポート リストを指定しない場合、そのモジュール内のすべての宣言がエクスポートされます。ちょっとしたトリックとしてできることは、生成されたすべての TH 関数を 1 つのモジュールに入れ、そのモジュールを再エクスポートすることです。

{-# LANGUAGE TemplateHaskell #-}
-- Put all of the generated stuff in one module
module Bla.Generated where

generateAFunctionCalled "foo"
generateAFunctionCalled "bar"

-- Re-export the generated module
module Bla (module Bla.Generated) where
import qualified Bla.Generated

これには、生成された関数の haddock ドキュメントを配置できないという欠点がありますが、それはとにかく通常行うことではありません。

于 2012-05-20T11:56:34.097 に答える