Piszę grę w węża w Haskell. Są to tylko niektóre z rzeczy mam:Jak mały powinienem tworzyć moduły w Haskell?
- typ
Coord
dane - typ
Line
dane - typ
Rect
dane - Klasa
Polygon
typ, który pozwala mi uzyskaćRect
postaci seria linii ([Line]
). - Klasa typu
Impassable
, która pozwala mi uzyskaćLine
jako serię szkieletów ([Coord]
), dzięki czemu mogę wykryć kolizje między innymiImpassable
s. - Klasa typu
Draw
dla wszystkiego, co chcę narysować na ekranie (HSCurses). - Wreszcie używam QuickCheck, więc chcę zadeklarować instancje
Arbitrary
dla wielu z tych rzeczy.
Obecnie mam wiele z nich w osobnych modułach, więc mam dużo małych modułów. Zauważyłem, że muszę je zaimportować dla siebie, więc zastanawiam się, o co chodzi.
Jestem szczególnie zdezorientowany instancjami Arbitrary
. Podczas korzystania z -Wall
pojawia się ostrzeżenie o osieroconych instancjach, gdy ja, ale te wystąpienia razem w jednym pliku testowym, rozumiem, że mogę uniknąć tego ostrzeżenia, umieszczając te wystąpienia w tym samym module, co typ danych, ale wtedy będę potrzebować do import Test.QuickCheck
dla wszystkich modułów, które wydają się głupie, ponieważ funkcja QuickCheck powinna być wymagana tylko podczas budowania pliku wykonywalnego testu.
Wszelkie porady dotyczące konkretnego problemu z QuickCheck byłyby mile widziane, podobnie jak wskazówki dotyczące bardziej ogólnego problemu, jak/gdzie programy powinny być podzielone na moduły.
Istnieją linki do rankingu według liczby pobrań i liczby odwrotnych zależności tutaj: http://stackoverflow.com/questions/3663550/which-haskell-package-for-json/3663601#3663601 –