在Haskell中组织公共类型
我有几个Haskell模块(Foo1.hs、Foo2.hs、Foo3.hs),它们都依赖于同一组类型(Common.hs): 此结构使代码在导入时可读性良好:在Haskell中组织公共类型,haskell,module,naming,Haskell,Module,Naming,我有几个Haskell模块(Foo1.hs、Foo2.hs、Foo3.hs),它们都依赖于同一组类型(Common.hs): 此结构使代码在导入时可读性良好: import Foo.Common 我有点担心的是,在整个项目中有很多同名的Common.hs文件。例如,添加一些条形图模块后: ... Foo/Foo1.hs Foo/Foo2.hs Foo/Foo3.hs Foo/Common.hs Bar/Bar1.hs Bar/Bar2.hs Bar/Common.hs ... 我们最终得到了
import Foo.Common
我有点担心的是,在整个项目中有很多同名的Common.hs文件。例如,添加一些条形图模块后:
...
Foo/Foo1.hs
Foo/Foo2.hs
Foo/Foo3.hs
Foo/Common.hs
Bar/Bar1.hs
Bar/Bar2.hs
Bar/Common.hs
...
我们最终得到了2个Common.hs文件。这样好吗?以某种方式重命名它们会更好吗(比如foocomon.hs和BarCommon.hs)
这样做似乎会让导入变得有点尴尬:
import Foo.FooCommon
尽管这可能只是一个品味问题。我认为在函数式编程中使用名为
Common
的模块与在OOP中使用名为Util
的类一样有用。我发现这篇演讲对于如何使用FooCommon和BarCommon组织haskell项目的想法非常有用。对我来说,情况更糟。@chi我无法回答这样的问题在不知道这些常见类型是什么的情况下提问。通常,使用诸如Manager
、Controller
、Util
、Common
、Core
等模糊词语可能表明存在一种隐式抽象,可以从显式抽象中获益。我认为这适用于OOP和FP。不过,这种抽象的确切含义是与上下文相关的,所以一般来说我无法回答。@MarkSeemann我同意。我认为在过去,我能够找到每个具体案例的解决方案,但没有一个是通用的解决方案。可能根本不存在一个完全通用的解决方案。
import Foo.FooCommon