ByteString.Lazy.Char8 (Недостаточно места)

Этот код выдает ошибку <stdin>: hGetBufSome: resource exhausted (Not enough space) сразу после выполнения.

import qualified Data.ByteString.Lazy.Char8 as B8
main = do
    (l:_) <- B8.lines `fmap` B8.getContents
    B8.putStrLn l

Я просто пытаюсь получить первую строчку. Значит, из-за ленивой загрузки он не будет пытаться исправить других? Я не могу понять, как избежать этой ошибки.


person Dulguun Otgon    schedule 18.11.2014    source источник
comment
На какой версии GHC и ОС вы работаете?   -  person ErikR    schedule 18.11.2014
comment
а ваш GHC 32-битный или 64-битный?   -  person ErikR    schedule 18.11.2014
comment
Windows 7 x64, GCH 64 бит   -  person Dulguun Otgon    schedule 18.11.2014


Ответы (2)


Кажется, есть проблема с ленивыми байтовыми строками в 64-битной Windows 7, например.

Поскольку все отчеты сделаны более года назад, я бы попробовал использовать GHC 7.8.3 (например, с платформы Haskell 2014.2.0.0), если вы еще не используете эту версию.

person ErikR    schedule 18.11.2014
comment
Должен ли я перейти на 32-битную версию? - person Dulguun Otgon; 18.11.2014
comment
О, ****, я только что потратил несколько часов, пытаясь понять это, предполагая, что это моя вина, так как я новичок - person Dulguun Otgon; 18.11.2014
comment
Да - я бы попробовал. Вы используете платформу Haskell? - person ErikR; 18.11.2014
comment
Да, HaskellPlatform-2014.2.0.0-x86_64 - person Dulguun Otgon; 19.11.2014

Вот отчет об ошибке GHC по этому вопросу: https://ghc.haskell.org/trac/ghc/ticket/11009#ticket

Я предполагаю, что решение на данный момент состоит в том, чтобы не использовать getContents для ленивых строк байтов (переключиться на строгое или просто читать постепенно).

person sclv    schedule 27.02.2016