.NET 的 "InternalsVisibleTo" 相当于 Haskell
.NET's "InternalsVisibleTo" equivalent in Haskell
在 .NET 中,我可以使用以下属性装饰我的程序集:
[<assembly: InternalsVisibleTo("MyProject.Test")>]
因此,所有标记为“内部”的模块都可以从“MyProject.Test”访问。我可以使用它,例如用于单元测试我不想在我的库中公开的功能。
我想知道 Haskell 的世界中是否有类似的东西。假设我有一个包含以下 .cabal 文件的库:
library
exposed-modules: MyLibrary.API
other-modules: MyLibrary.Utils
-- ...
test-suite mylib-test
-- ...
build-depends: base,
hspec,
my-library
有没有办法从 mylib-test 测试套件中引用“MyLibrary.Utils”?
您可以将其作为内部库的一部分,并依赖于 public 库和测试套件。包外将不可用。
library utils
exposed-modules: MyLibrary.Utils
library
exposed-modules: MyLibrary.API
build-depends: utils
test-suite mylib-test
build-depends: base, hspec, my-library, utils
或者,有一个强烈的惯例,无论如何都要公开模块,但在其名称中包含 Internal
并在文档中告诉人们您破坏了它是您购买的。
在 .NET 中,我可以使用以下属性装饰我的程序集:
[<assembly: InternalsVisibleTo("MyProject.Test")>]
因此,所有标记为“内部”的模块都可以从“MyProject.Test”访问。我可以使用它,例如用于单元测试我不想在我的库中公开的功能。
我想知道 Haskell 的世界中是否有类似的东西。假设我有一个包含以下 .cabal 文件的库:
library
exposed-modules: MyLibrary.API
other-modules: MyLibrary.Utils
-- ...
test-suite mylib-test
-- ...
build-depends: base,
hspec,
my-library
有没有办法从 mylib-test 测试套件中引用“MyLibrary.Utils”?
您可以将其作为内部库的一部分,并依赖于 public 库和测试套件。包外将不可用。
library utils
exposed-modules: MyLibrary.Utils
library
exposed-modules: MyLibrary.API
build-depends: utils
test-suite mylib-test
build-depends: base, hspec, my-library, utils
或者,有一个强烈的惯例,无论如何都要公开模块,但在其名称中包含 Internal
并在文档中告诉人们您破坏了它是您购买的。