如何单独制作界面和实现文件?

时间:2013-01-09 09:52:52

标签: haskell

我想分别在Haskell中创建接口(类或实例)和实现文件,如下所示:

file1 :(对于界面)

class X where
   funcX1 = doFuncX1
   funcX2 = doFuncX2
   ....

instance Y where
   funcY1 = doFuncY1
   funcY2 = doFuncY2
   ...

文件2 :(用于实施)

doFuncX1 = ...
doFuncX2 = ...
doFuncY1 = ...
...

如果必须在file2中导入file1,反之亦然,我该怎么做?

1 个答案:

答案 0 :(得分:4)

在Haskell中你不需要任何这种麻烦的分离。只需在模块导出列表(module Foo ( X(..) ... ) where ...)中标记您想要公开的内容,使用cabal构建项目,如果要导出库但不发布源代码,则只需发布{{ 1}}文件夹包含二进制接口文件和Haddock文档。这比讨厌更方便,例如需要手动保持同步的dist.h个文件。

但是,当然,没有什么能阻止您将实现放在单独的非公共文件中。您只需要为此执行“反之亦然”导入,只是可能是具有必要数据类型声明的公共文件。 E.g。

  • .cpp

    Public.hs
  • module Public(module Public.Datatypes) where import Public.Datatypes import Private.Implementations instance X Bar where { funcX1 = implFuncX1; ... }

    Public/Datatypes.hs
  • module Public.Datatypes where data Bar = Bar { ... } class X bar where { funcX1 :: ... }

    Private/Implementations.hs

但通常最好只将所有内容放入module Private.Implementations(implFuncX1, ...) where import Public.Datatypes implFuncX1 :: ... implFuncX1 = ...