Ведут ли себя охраняемые трубы так же, как трубы с использованием await?

Трубы - это действительно элегантная, действительно простая версия итераций. Вы можете очень легко написать код pipe, используя примитивы await и yield. Паоло Каприотти расширил концепцию труб с помощью guarded pipes, который использует немного более сложный примитив tryAwait, который позволяет трубе выполнить некоторую финализацию, когда входной поток закончится.

Реализация guarded pipe переопределяет await в терминах tryAwait:

await = tryAwait >>= maybe discard return

Мой вопрос заключается в следующем: если я пишу код, ориентированный на более простую реализацию Pipes (использующий await и yield), используя тот же самый код, будет ли он вести себя так же, если я перейду на реализацию guarded pipe? Другими словами, можно ли рассматривать код guarded pipe как просто супермножество кода pipe с точки зрения поведения?

13
задан Dan Burton 4 February 2012 в 23:43
поделиться