1

我想编写一个直接对 Data.IntSet 'IntSet' 数据类型进行操作的函数。

查看 hackage IntSet 的源代码正在导出(即顶部有一个 IntSet(..)),但它是在 Data.IntSet.Base 中定义的,它是一个隐藏模块:

Prelude> :m +Data.IntSet.Base

<no location info>:
    Could not find module `Data.IntSet.Base'
    it is a hidden module in the package `containers-0.5.0.0'
Prelude>

有什么办法可以取消隐藏吗?

我打算写一个函数:

match :: Int -> Mask -> IntSet -> IntSet

它返回给定 IntSet 的子集,使得所有元素都等于输入无掩码。我无法看到使用导出的 api 有效地编写此函数(例如,对于我想要使用的大型 IntSet,使用过滤器或分区会太慢)。

显然我可以从容器包中复制源代码,但如果有更优雅的方式会很好。

4

1 回答 1

2

显而易见的答案是你不能以一般的方式。

如果你只是想让它玩起来(以一种不可移植的方式),你可以下载containers包(cabal unpack conntainers)并将模块移动到exposed-modulescabal 文件中的部分并重新安装包。

于 2013-09-13T10:29:06.767 回答