导出模板haskell生成的定义

Vla*_*eev 4 haskell code-generation template-haskell

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

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

dfl*_*str 7

您需要导出生成的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
Run Code Online (Sandbox Code Playgroud)

这样做的缺点是你不能为生成的函数添加haddock文档,但这不是你通常做的事情.

  • 关键是`.Generated`模块只包含TH生成的东西.正常的`Bla`模块将包含您/可能不想导出的其他内容. (3认同)