导出模板haskell生成的定义

时间:2012-05-20 11:24:24

标签: haskell code-generation template-haskell

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

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

1 个答案:

答案 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文档,但这通常不是你通常做的事情。

相关问题