Я использую пакет перечислителя Джона Милликина и пытаюсь создать что-то, примерно эквивалентное Data.Enumerator.Binary.enumHandle
, за исключением того, что он соединяет сам сокет, а затем пытается перечислить полученный дескриптор. Трудность заключается в том, что соединение ненадежно, и я бы хотел, чтобы оно снова подключилось и возобновило перечисление, если что-то пойдет не так.
Я бы обычно ожидал, что Enumerator будет собственным осмысленным экземпляром Monad, но, поскольку это псевдоним типа для функции, монадическое поведение в ней - всего лишь читатель шага ввода, который здесь не очень полезен , Я пытался соединить что-то, что просто продолжало зацикливать Enumerator, используя catchError
, но это не получилось так, как я ожидал, и я не мог понять, что он делает, поэтому мне было интересно, кто-нибудь может предложить хороший идиоматический подход к этому. У меня все в порядке с каркасом решения, поскольку, очевидно, я пропустил много деталей.
Есть идеи?