Estoy considerando convertir una aplicación C# a Haskell como mi primer proyecto Haskell "real". Sin embargo, quiero asegurarme de que sea un proyecto que tenga sentido. La aplicación recoge paquetes de datos de ~ 15 transmisiones en serie que vienen a alrededor de 1 kHz, carga esos valores en los buffers circulares correspondientes en mi objeto de "contexto", cada uno con ~ 25000 elementos, y luego a 60 Hz los envía a OpenGL para visualización de forma de onda. (Por lo tanto, tiene para ser almacenado como una matriz, o al menos convertido a una matriz cada 16 ms). También hay aproximadamente 70 campos en mi objeto de contexto que solo mantengo el valor actual (más reciente), no la forma de onda de la secuencia.¿Es posible crear arreglos de memoria circular grandes y rápidos para grabar en Haskell?
Hay varios aspectos de este proyecto que se corresponden bien con Haskell, pero lo que más me preocupa es el rendimiento. Si para cada nuevo punto de datos en cualquiera de las secuencias, tengo que clonar todo el objeto de contexto con 70 campos y 15 matrices de 25000 elementos, obviamente habrá problemas de rendimiento.
¿Lo solucionaría poniendo todo en la IO-mónada? Pero luego eso parece de alguna manera frustrar el propósito de usar Haskell, ¿verdad? Además, todo mi código en C# está basado en eventos; ¿Hay un idioma para eso en Haskell? Parece que agregar un oyente crea un "efecto secundario" y no estoy seguro de cómo se haría exactamente eso.