我的模块包含定义,其中一部分被导出(在module
子句中)。我也想导出Template Haskell生成的声明。但由于似乎没有办法用TH修改module
子句,我不能这样做。
是否可以指定应该导出TH生成的声明?或者也许有其他方法可以做到这一点?
答案 0 :(得分:6)
您需要导出生成的TH声明的名称。例如,如果您有一个生成data B = C | D
声明的TH函数,则只需导出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
这样做的缺点是你不能为生成的函数添加haddock文档,但这通常不是你通常做的事情。