Sto pensando di convertire un'applicazione C# in Haskell come il mio primo progetto "reale" Haskell. Tuttavia, voglio assicurarmi che sia un progetto sensato. L'app raccoglie pacchetti di dati da ~ 15 flussi seriali che arrivano a circa 1 kHz, carica quei valori nei corrispondenti buffer circolari sul mio oggetto "contesto", ognuno con ~ 25000 elementi, quindi a 60 Hz invia tali array a OpenGL per visualizzazione della forma d'onda. (Pertanto, ha da archiviare come array, o almeno convertito in un array ogni 16 ms). Ci sono anche circa 70 campi sul mio oggetto di contesto che mantengo solo il valore corrente (più recente), non la forma d'onda del flusso.È possibile creare velocemente grandi array di buffer circolari per la registrazione in streaming in Haskell?
Ci sono diversi aspetti di questo progetto che si adattano bene ad Haskell, ma la cosa di cui mi preoccupo è la performance. Se per ogni nuovo punto di dati in uno qualsiasi dei flussi, devo clonare l'intero oggetto di contesto con 70 campi e 15 matrici di 25000 elementi, ovviamente ci saranno problemi di prestazioni.
Vorrei aggirare questo mettendo tutto nell'IO-monade? Ma quello sembra in qualche modo sconfiggere lo scopo di usare Haskell, giusto? Anche tutto il mio codice in C# è guidato dagli eventi; c'è un idioma per questo in Haskell? Sembra che aggiungere un ascoltatore crei un "effetto collaterale" e non sono sicuro di come esattamente ciò sarebbe stato fatto.