Разъяснение о потоковой передаче и эффектах в контексте библиотеки Pipes

Учебник по трубам упомянул об этом в своей документации:

Если вы жертвуете эффектами, вы получаете чистые и ленивые списки на Haskell, которые вы можете преобразовать, используя составные функции в постоянном пространстве, но без чередования эффектов.

Если вы жертвуете Streaming, вы получаете mapM, forM и "ListT сделали неправильно", которые являются составными и эффективными, но не возвращают ни одного результата, пока весь список не будет сначала обработан и загружен в память.

Но не Streaming подразумевать чересстрочные эффекты? Когда вы StreamingВы фактически потребляете кусок за кусок. Итак, при потреблении фрагмента фрагментом не чередуются ли эффекты?

1 ответ

Решение

Потоковое действительно подразумевает чередующиеся эффекты. Текст, который вы цитируете, не говорит иначе.

Перефразируя документацию по трубам:

  • Если у вас нет эффектов, то у вас просто ленивые структуры данных. Они хорошо сочиняются, но вы не можете делать IO (кроме ленивого IO, которого мы стараемся избегать).
  • Если у вас есть эффекты, но вы не транслируете их, то вы можете сделать IO, но не получите результат до конца.
Другие вопросы по тегам