我想在 Haskell 中分别制作接口(类或实例)和实现文件,如下所示:
file1:(用于接口)
X 类 funcX1 = doFuncX1 funcX2 = doFuncX2 …… 实例 Y 其中 funcY1 = doFuncY1 funcY2 = doFuncY2 ...
文件2:(用于实施)
doFuncX1 = ... doFuncX2 = ... doFuncY1 = ... ...
当必须在 file2 中导入 file1 时,我该怎么做,反之亦然?
我想在 Haskell 中分别制作接口(类或实例)和实现文件,如下所示:
file1:(用于接口)
X 类 funcX1 = doFuncX1 funcX2 = doFuncX2 …… 实例 Y 其中 funcY1 = doFuncY1 funcY2 = doFuncY2 ...
文件2:(用于实施)
doFuncX1 = ... doFuncX2 = ... doFuncY1 = ... ...
当必须在 file2 中导入 file1 时,我该怎么做,反之亦然?
在 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
.