Mam zamiar przekonwertować aplikację C# na Haskell jako mój pierwszy "prawdziwy" projekt Haskella. Jednak chcę się upewnić, że jest to projekt, który ma sens. Aplikacja zbiera pakiety danych z ~ 15 strumieni szeregowych o częstotliwości około 1 kHz, ładuje te wartości do odpowiednich buforów kołowych w moim obiekcie "kontekstowym", każdy z ~ 25000 elementów, a następnie z częstotliwością 60 Hz wysyła te tablice do OpenGL dla wyświetlanie przebiegu. (W ten sposób ma być przechowywane jako tablica lub co najmniej konwertowane do tablicy co 16 ms). Na moim obiekcie kontekstowym znajduje się także około 70 pól, które utrzymuję tylko bieżącą (najnowszą) wartość, a nie przebieg strumienia.Czy możliwe jest tworzenie szybkich, dużych, okrągłych macierzy buforowych do nagrywania strumieniowego w Haskell?
Jest kilka aspektów tego projektu, które dobrze pasują do Haskella, ale martwię się tylko wydajnością. Jeśli dla każdego nowego punktu danych w dowolnym strumieniu, będę musiał sklonować cały obiekt kontekstu za pomocą 70 pól i 15 tablic z 25000 elementów, oczywiście wystąpią problemy z wydajnością.
Czy obejdę to, umieszczając wszystko w IO-Monadzie? Ale wtedy wydaje się, że w pewien sposób nie uda się użyć Haskella, prawda? Również cały mój kod w C# jest sterowany zdarzeniami; czy jest tam jakiś idiom w Haskell? Wygląda na to, że dodanie detektora tworzy "efekt uboczny" i nie jestem pewien, jak dokładnie by to zrobiono.