我的模块包含定义,其中一部分被导出(在module
子句中)。我也想导出 Template Haskell 生成的声明。但是由于似乎没有办法module
用 TH 修改子句,所以我不能这样做。
是否可以指定应该导出 TH 生成的声明?或者也许还有其他方法可以做到这一点?
我的模块包含定义,其中一部分被导出(在module
子句中)。我也想导出 Template Haskell 生成的声明。但是由于似乎没有办法module
用 TH 修改子句,所以我不能这样做。
是否可以指定应该导出 TH 生成的声明?或者也许还有其他方法可以做到这一点?
您需要导出生成的 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
这样做的缺点是您不能为生成的函数放置黑线鳕文档,但这并不是您通常会做的事情。