Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Haskell中组织公共类型_Haskell_Module_Naming - Fatal编程技术网

在Haskell中组织公共类型

在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 ... 我们最终得到了

我有几个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
...
我们最终得到了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