是否可以在 Template Haskell 中为函数生成注释?

问题描述 投票:0回答:2

在我们的项目中,我们有很多 TH 生成的函数。向它们添加通用注释是有意义的,以便它们在 Haddock/Hoogle 中可见。至少,类似“这是由 TH 生成的”。这样的事可能吗?

haskell comments template-haskell generated-code
2个回答
2
投票

如果有的话那就太好了,但目前在 GHC 中还不可能。


0
投票

是的。

这是一个基本示例,它声明某个函数的副本,在其名称前面添加

hello_
,并在其文档前面添加
Hello !

{-# LANGUAGE TemplateHaskell #-}

module MyTH where

import Language.Haskell.TH
import Language.Haskell.TH.Syntax

helloCopy :: Name -> Q [Dec]
helloCopy name = do
  doc  <- getDoc (DeclDoc name)
  let helloName = mkName ("hello_" ++ nameBase name)
  let helloDoc = case doc of
        Nothing -> "Hello !"
        Just old -> "Hello !" ++ old
  addModFinalizer $ putDoc (DeclDoc helloName) helloDoc
  [d| $(varP helloName)= $(varE name) |]
module MyModule where

import MyTH

-- | Interesting stuff about blub
blub :: Int
blub = 4

$(helloCopy 'blub)

现在如果你运行

haddock
,你会得到以下文档,你会找到
hello_blub
的文档,上面写着“你好!关于 blub 的有趣的东西”

© www.soinside.com 2019 - 2024. All rights reserved.