我有一个 Haskell 模块,我希望它导出在其文件中声明的所有对象,除了一个特定的函数local_func
。
有没有比写一个明确列出所有其他声明的出口清单(并小心地让这个清单永远保持最新)更清洁的方法来实现这一点?
换句话说,我想要 , 的类似物import MyModule hiding (local_func)
,但在导出模块中指定,而不是在导入时指定。
据我所知,目前没有办法做到这一点。
我通常最终做的是有一个中央模块,它重新导出重要的东西,作为一种方便的方式来导入所有必要的东西,而不是在定义这些东西的模块中隐藏任何东西(在某些情况下——你可能不会预见到! - 让您的用户更容易修改模块中的内容)。
为此,请使用以下语法:
-- |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)
您现在已经方便地导出了这些东西。
不幸的是没有。
可以想象一个小的句法添加,它可以实现你所要求的那种东西。现在可以写:
module M (module M) where
foo = quux
quux = 1+2
您可以显式导出整个模块。但是假设我们要添加语法,以便可以从该模块中隐藏。那么我们就可以这样写:
module M (module M hiding (quux)) where
foo = quux
quux = 1+2