Чем это может быть вызвано?
(inb4 тачка скорее всего чистая, железо/дрова нормальные).
Дано: библиотека, умеющая читать некоторый структурированный формат. Парсит входной поток и отдает его в виде последовательности логических "событий". Интерфейс на C, интересно обернуть его для хаскеля. В связи с этим есть вопросы. В целом оригинальный интерфейс выглядит как-то так: stream = xxx_stream_from_fd(0); // stream' = xxx_stream_from_string(data, length); reader = xxx_reader_new(stream); while ((event_type = xxx_reader_get_next_event(reader)) != XXX_EVENT_END_STREAM) { switch (event_type) { ... value = xxx_reader_get_???(reader); } } xxx_reader_delete(reader); xxx_stream_delete(reader); Понятно, что в х-е это должно быть какой-то монадой. 1. Обязательно ли для случая с from_string чтобы всё происходило в IO? Этого хотелось бы избежать. Как в таком случае должен выглядеть тип, общий для обоих вариантов входных потоков? 2. xxx_reader_get_string возвращает указатель на кусок буфера внутри парсера (для zero copy). Указатель инвалидируется следующим вызовом get_next_event. Возможно ли безопасно описать такой контракт в типах?