4

我的模块包含定义,其中一部分被导出(在module子句中)。我也想导出 Template Haskell 生成的声明。但是由于似乎没有办法module用 TH 修改子句,所以我不能这样做。

是否可以指定应该导出 TH 生成的声明?或者也许还有其他方法可以做到这一点?

4

1 回答 1

7

您需要导出生成的 TH 声明的名称。例如,如果您有一个生成data B = C | D声明的 TH 函数,您只需简单地 export module Mymodule (B(C,D)) where ...

如果您不指定导出列表,则该模块中的所有声明都将被导出。您可以做的一个小技巧是将所有生成的 TH 函数放在一个模块中,然后重新导出该模块:

{-# 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

这样做的缺点是您不能为生成的函数放置黑线鳕文档,但这并不是您通常会做的事情。

于 2012-05-20T11:56:34.097 回答