Это на самом деле одно из худших приложений, в котором можно использовать Haskell. Почему?
Множество операций ввода / вывода означает, что вам нужно иметь дело с монадами; который я бы предложил решить, как только вы освоитесь с другими уникальными особенностями языка, а не раньше. Это сложная тема даже для дипломированных специалистов по математике (или, как я слышал). Мало того, что если вы начнете писать код, который в основном является вводом-выводом, у вас может сложиться впечатление, что вы можете и должны выполнять множество алгоритмов в Haskell. Это не вариант. Возможно, самое главное для вас, я предполагаю, что вы были привлечены к этому языку из-за его заведомо коротких и простых кусков кода. Это относится практически ко всему языку, кроме ввода-вывода и ручного управления памятью (что на самом деле является вводом-выводом).
Я бы предложил написать вашу программу на C, которая идеально подходит для этой задачи, и пусть ваши первые программы на Haskell будут вещами, которые вы считаете довольно сложными на других языках. Я сам большой поклонник алгоритмов машинного обучения, но какие бы структуры данных или алгоритмы вам ни казались сложными в других языках, попробуйте переделать для Haskell.
Просто привыкните писать гораздо меньше кода. Моим первым крупным приложением на Haskell была учебная библиотека для сетевых сетей, в которой использовались как многопоточные, так и обучающие методы подкрепления и генетические алгоритмы. 350 строк кода (включая большое количество комментариев). Это серьезная сила Хаскелла, на мой взгляд.