1

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

file1:(用于接口)

X 类
   funcX1 = doFuncX1
   funcX2 = doFuncX2
   ……

实例 Y 其中
   funcY1 = doFuncY1
   funcY2 = doFuncY2
   ...

文件2:(用于实施)

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

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

4

1 回答 1

4

在 Haskell 中你不需要任何如此繁琐的分离。只需在模块导出列表module Foo ( X(..) ... ) where ...dist黑线鳕文档。.h这比讨厌的 eg和.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 = ...
    

但通常最好将所有内容都放入Public.hs.

于 2013-01-09T09:59:22.097 回答