Unit testing .NET';s";“内部可视性”;Haskell中的等价物

Unit testing .NET';s";“内部可视性”;Haskell中的等价物,unit-testing,haskell,internalsvisibleto,Unit Testing,Haskell,Internalsvisibleto,在.NET中,我可以使用以下属性装饰程序集: [] 由于这一点,所有标记为“internal”的模块都可以从“MyProject.Test”访问。我可以使用它,例如,对我不想在库中公开的功能进行单元测试 我想知道哈斯克尔的世界里是否有类似的东西。假设我有一个包含以下.cabal文件的库: library exposed-modules: MyLibrary.API other-modules: MyLibrary.Utils -- ... test-suite mylib

在.NET中,我可以使用以下属性装饰程序集:

[]
由于这一点,所有标记为“internal”的模块都可以从“MyProject.Test”访问。我可以使用它,例如,对我不想在库中公开的功能进行单元测试

我想知道哈斯克尔的世界里是否有类似的东西。假设我有一个包含以下.cabal文件的库:

library
  exposed-modules:  MyLibrary.API
  other-modules:    MyLibrary.Utils
  -- ...

test-suite mylib-test
  -- ...
  build-depends:  base,
                  hspec,
                  my-library

有没有办法从mylib测试套件中引用“MyLibrary.Utils”?

您可以将其作为内部库的一部分,并依赖于公共库和测试套件中的内容。它将不在包装外提供

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

或者,有一个强大的惯例,即无论如何都要公开模块,但在其名称中包含
内部
,并在文档中告诉人们您破坏了它,您购买了它。

听起来合法。我要试一试。谢谢。我对哈斯克尔的世界还很陌生,所以我不知道惯例。如果你说它很强,那么我想最好还是跟着它走,不是吗?:)@AlojzyLeszcz是你想在世界上看到的改变。这就是为什么尽管住在美国,我还是只使用公制。(也就是说,我不清楚内部库是否是明显优越的选择。有一点很有趣,那就是当情况需要时,有权修补内部库——还有一点很有趣,那就是永远不必处理那些依赖内部库的人的投诉,当他们在我认为最好注意到内部库还没有完全的支持——我相信
stack
不能与它们一起使用。所以我个人不会使用内部库,直到
stack
获得对它们的支持。@DanielWagner我已经尝试过了,并在我的.cabal文件中创建了另一个库。它工作得很好,我现在唯一的问题是
CabalNewHaddock
也试图为
utils
库生成文档。是否有方法指示它仅为主库创建文档?