Разъяснение о потоковой передаче и эффектах в контексте библиотеки Pipes
Учебник по трубам упомянул об этом в своей документации:
Если вы жертвуете эффектами, вы получаете чистые и ленивые списки на Haskell, которые вы можете преобразовать, используя составные функции в постоянном пространстве, но без чередования эффектов.
Если вы жертвуете Streaming, вы получаете mapM, forM и "ListT сделали неправильно", которые являются составными и эффективными, но не возвращают ни одного результата, пока весь список не будет сначала обработан и загружен в память.
Но не Streaming
подразумевать чересстрочные эффекты? Когда вы Streaming
Вы фактически потребляете кусок за кусок. Итак, при потреблении фрагмента фрагментом не чередуются ли эффекты?
1 ответ
Потоковое действительно подразумевает чередующиеся эффекты. Текст, который вы цитируете, не говорит иначе.
Перефразируя документацию по трубам:
- Если у вас нет эффектов, то у вас просто ленивые структуры данных. Они хорошо сочиняются, но вы не можете делать IO (кроме ленивого IO, которого мы стараемся избегать).
- Если у вас есть эффекты, но вы не транслируете их, то вы можете сделать IO, но не получите результат до конца.