Ich schreibe ein Schlangenspiel in Haskell. Dies sind einige der Dinge, die ich habe:Wie klein soll ich in Haskell Module machen?
- A
Coord
Datentyp - A
Line
Datentyp - A
Rect
Datentyp - A
Polygon
Typ-Klasse, die mir erlaubt, eineRect
als ein zu erhalten Reihe von Linien ([Line]
). - Eine
Impassable
Typ-Klasse, die ich einLine
als eine Reihe von Koordinaten erhalten kann ([Coord]
), so dass ich Kollisionen zwischen anderenImpassable
s erkennen kann. - Eine
Draw
Typklasse für alles, was ich auf den Bildschirm zeichnen möchte (HSCurses). - Schließlich verwende ich QuickCheck, also möchte ich
Arbitrary
Instanzen für viele dieser Dinge erklären.
Derzeit habe ich viele davon in separaten Modulen, so dass ich viele kleine Module habe. Ich habe bemerkt, dass ich eine Menge von ihnen füreinander importieren muss, also frage ich mich, was der Punkt war.
Ich bin besonders verwirrt über Arbitrary
Instanzen. Bei der Verwendung von -Wall
bekomme ich Warnungen über verwaiste Instanzen, wenn ich aber diese Instanzen zusammen in einer Testdatei, ich verstehe, dass ich diese Warnung vermeiden kann, indem ich diese Instanzen in das gleiche Modul wie wo der Datentyp definiert ist, aber dann brauche ich zu import Test.QuickCheck
für alle diese Module, die albern erscheint, weil QuickCheck nur benötigt werden sollte, wenn Sie die Test-ausführbare Datei erstellen.
Jeder Hinweis auf das spezifische Problem mit QuickCheck wäre wünschenswert, ebenso wie die Anleitung zum allgemeineren Problem, wie Programme in Module unterteilt werden sollten.
Es gibt Links für Rankings nach Anzahl der Downloads und Anzahl der umgekehrten Abhängigkeiten hier: http://stackoverflow.com/questions/3663550/which-haskell-package-for-json/3663601#3663601 –