Tengo una pregunta sobre la mejor manera de diseñar un programa en el que estoy trabajando en Haskell. Estoy escribiendo un simulador de la física, que es algo que he hecho un montón de lenguajes imperativos estándar, y por lo general el método principal se ve algo como:Diseño de programa en Haskell: cómo hacer simulación sin mutabilidad
while True:
simulationState = stepForward(simulationState)
render(simulationState)
Y me pregunto cómo hacer algo similar en Haskell . Tengo una función step :: SimState -> SimState
y una función display :: SimState -> IO()
que utiliza HOpenGL para dibujar un estado de simulación, pero no sé cómo hacer esto en un "bucle" de clases, ya que todas las soluciones que puedo encontrar implican algún tipo de mutabilidad Soy un poco novato en lo que respecta a Haskell, por lo que es muy posible que me pierda una decisión de diseño muy obvia. Además, si hay una mejor manera de diseñar mi programa como un todo, me gustaría escucharlo.
¡Gracias de antemano!
Parece que falta su lista [el paquete 'monad-loops'] (http://hackage.haskell.org/package/monad-loops), que creo que es en realidad la demostración más clara del enfoque. –
Fantástico - He estado buscando una razón para aprender iteratees. Echaré un vistazo al paquete de tuberías. ¡Muchas gracias! –
es excesivo para la pregunta original, pero para aquellos que podrían venir después creo que deberíamos mencionar [Programación reactiva funcional] (http://stackoverflow.com/questions/3154701/help-understanding-arrows-in- haskell) en particular [Yampa/Ánimas] (http://www.haskell.org/haskellwiki/Yampa). –