我应该在Haskell中制作模块有多小?

Oll*_*ers 6 haskell modularity module

我正在Haskell写一个蛇游戏.这些是我的一些东西:

  • Coord数据类型
  • Line数据类型
  • Rect数据类型
  • 一个Polygon类型类,它允许我获得Rect一系列的行([Line]).
  • 一个Impassable类型类,它允许我获得Line一系列Coords([Coord]),以便我可以检测其他Impassables 之间的冲突.
  • Draw我要绘制到屏幕的任何内容的类型类(HSCurses).
  • 最后我使用的是QuickCheck,所以我想Arbitrary为很多这些东西声明实例.

目前我有很多这些在单独的模块中,所以我有很多小模块.我注意到我必须互相导入很多这样的东西,所以我有点想知道重点是什么.

我对Arbitrary实例感到特别困惑.在使用-Wall时,当我将这些实例放在一个测试文件中时,我得到关于孤立实例的警告,我的理解是我可以通过将这些实例放在与定义数据类型的模块相同的模块中来避免该警告但是我需要import Test.QuickCheck对于所有那些看似愚蠢的模块,因为只有在构建测试可执行文件时才需要QuickCheck.

有关QuickCheck特定问题的任何建议都将受到赞赏,因为有关如何/何地将程序划分为模块的更一般问题的指导.

Nat*_*ers 1

我通常更强调由它公开的函数定义的模块接口,而不是它公开的数据类型。您的某些类型是否共享一组通用的功能?然后我会把它们放在同一个模块中。

但我的做法可能不是最好的,因为我通常编写小程序。我建议查看Hackage中的一些代码,看看包维护者做了什么。

如果有一种方法可以根据社区评级或下载次数对软件包进行排序,那么这将是一个很好的起点。(我以为有,但现在我寻找它,我找不到它。) 如果失败,请查看您已经使用的软件包。