Haskell:隐藏模块导出中的特定功能?

时间:2013-06-21 17:55:59

标签: haskell module

我有一个Haskell模块,我希望它导出在其文件中声明的所有对象,除了一个特定的函数local_func

是否有更简洁的方法来实现这一目标,而不是通过编写明确列出所有其他声明的导出列表(并谨慎地保持此列表的所有永久更新)?

换句话说,我想要import MyModule hiding (local_func)的模拟,但是在导出模块中指定而不是在导入时指定。

2 个答案:

答案 0 :(得分:28)

据我所知,目前还没有办法做到这一点。

我通常最终会做的是拥有一个重新导出重要内容的中央模块,作为导入所有必要内容的便捷方式,同时不会在定义这些内容的模块中隐藏任何内容(在某些情况下,您可能赢了)不可预见! - 让用户更容易修改模块中的内容。)

为此,请使用以下语法:

-- |Convenient import module
module Foo.Import (module All) where

-- Import what you want to export
import Foo.Stuff as All hiding (local_func)
-- You can import several modules into the same namespace for this trick!
-- For example if using your module also requires 'decode' from "Data.Aeson" you can do
import Data.Aeson as All (decode)

您现在已经方便地导出了这些东西。

答案 1 :(得分:7)

不幸的是没有。

可以想象一个小的句法添加,它将允许你要求的那种东西。现在可以写:

module M (module M) where

foo = quux

quux = 1+2

您可以显式导出整个模块。但是假设我们要添加语法,以便可以隐藏该模块。然后我们就可以这样写:

module M (module M hiding (quux)) where

foo = quux

quux = 1+2