有什么方法可以为构造函数被包含它的模块隐藏的结构创建函数吗?
就我而言,我想添加在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.
我确实意识到如果内部实现发生变化,这可能会有风险,但我只是想尝试一些东西。
答案 0 :(得分:3)
true-name包(“模板Haskell黑客获取未导出的名称”)对于以这种方式播放看起来很有帮助。其中一个examples in GitHub实际涉及IntSet
。