为隐藏构造函数的Haskell结构创建函数

时间:2015-07-26 15:52:04

标签: haskell

有什么方法可以为构造函数被包含它的模块隐藏的结构创建函数吗?

就我而言,我想添加在Data.IntSet.IntSet上运行的函数,我需要在构造函数上进行模式匹配。访问不在模块导出列表中的函数也是很好的。这可能吗?

这里有一些东西说明了我想要做的事情的一般原则(不是我真正想做的事情,但它说明了这一点):

import qualified Data.IntSet as IntSet

isTip :: IntSet.IntSet -> Bool
isTip (IntSet.Tip _) = True
isTip _ = False

尝试在GHCi中加载它:

Not in scope: data constructor ‘IntSet.Tip’
Failed, modules loaded: none.

我确实意识到如果内部实现发生变化,这可能会有风险,但我只是想尝试一些东西。

1 个答案:

答案 0 :(得分:3)

true-name包(“模板Haskell黑客获取未导出的名称”)对于以这种方式播放看起来很有帮助。其中一个examples in GitHub实际涉及IntSet