Зачем оборачивать Монада Data.Binary.Put создает утечку памяти?

Я пытаюсь обернуть монаду Data.Binary.Put в другую, чтобы позже я мог задавать ей вопросы вроде «сколько байтов она собирается записать» или «какова текущая позиция в файл". Но даже очень тривиальные обертки вроде:

data Writer1M a = Writer1M { write :: P.PutM a }
or
data Writer2M a = Writer2M { write :: (a, P.Put) }

создают огромную утечку места, и программа обычно дает сбой (после использования 4 ГБ ОЗУ). Вот что я Вот пример кода, демонстрирующего проблему: http://hpaste.org/43400/why_wrapping_the_databinaryp

UPDATE2: Также есть вторая часть этого вопроса здесь .

12
задан Community 23 May 2017 в 12:18
поделиться