我正在用 Haskell 写一个蛇游戏。这些是我拥有的一些东西:
- 一种
Coord
数据类型 - 一种
Line
数据类型 - 一种
Rect
数据类型 - 一个
Polygon
类型类,它允许我将 aRect
作为一系列行 ([Line]
)。 - 一个
Impassable
类型类,它允许我将 aLine
作为一系列 Coords ([Coord]
),以便我可以检测其他Impassable
s 之间的冲突。 Draw
我想在屏幕上绘制的任何东西的类型类(HSCurses)。- 最后我使用了 QuickCheck,所以我想
Arbitrary
为很多这些东西声明实例。
目前我在单独的模块中有很多这些,所以我有很多小模块。我注意到我必须为彼此导入很多,所以我有点想知道重点是什么。
我对Arbitrary
实例特别困惑。使用-Wall
时,当我将这些实例放在一个测试文件中时,我会收到有关孤立实例的警告,我的理解是,我可以通过将这些实例放在与定义数据类型的位置相同的模块中来避免该警告,但是我需要import Test.QuickCheck
对于所有那些看起来很愚蠢的模块,因为只有在构建测试可执行文件时才需要 QuickCheck。
任何有关 QuickCheck 特定问题的建议以及有关如何/在何处将程序划分为模块的更一般问题的指导都将不胜感激。