Estoy escribiendo un juego de serpientes en Haskell. Estas son algunas de las cosas que tengo:¿Qué tan pequeño debería hacer hacer módulos en Haskell?
- Un tipo de datos
Coord
- Un tipo de datos
Line
- Un tipo de datos
Rect
- Una clase
Polygon
tipo, lo que me permite obtener unRect
como serie de líneas ([Line]
). - Una clase de tipo
Impassable
que me permite obtener unLine
como una serie de Coords ([Coord]
) para que pueda detectar colisiones entre otrasImpassable
s. - A
Draw
tipo de clase para todo lo que quiero dibujar en la pantalla (HSCurses). - Finalmente estoy usando QuickCheck así que quiero declarar
Arbitrary
instancias para muchas de estas cosas.
Actualmente tengo muchos de estos en módulos separados, así que tengo muchos módulos pequeños. Me he dado cuenta de que tengo que importar muchos de ellos el uno al otro, así que me pregunto cuál fue el punto.
Estoy especialmente confundido acerca de las instancias Arbitrary
. Cuando utilizo -Wall
recibo advertencias sobre instancias huérfanas cuando solo las instancias juntas en un archivo de prueba, entiendo que puedo evitar esa advertencia colocando esas instancias en el mismo módulo donde se define el tipo de datos, pero luego necesitaré a import Test.QuickCheck
para todos esos módulos que parece tonto porque QuickCheck solo debería ser requerido al construir el ejecutable de prueba.
Cualquier consejo sobre el problema específico con QuickCheck sería apreciado como lo haría la orientación sobre el problema más general de cómo/dónde los programas deberían dividirse en módulos.
Hay enlaces para clasificaciones por número de descargas y número de dependencias inversas aquí: http://stackoverflow.com/questions/3663550/which-haskell-package-for-json/3663601#3663601 –