Pipes - действительно изящная, действительно простая версия итераций. Вы легко можете написать код трубы, используя примитивы await
и yield
. Паоло Каприотти расширил концепцию труб с помощью защищенных труб, в котором используется несколько более сложный примитив tryAwait
, который позволяет трубе выполнить некоторую финализацию один раз выходной поток истекает.
Реализация защищенной трубы переопределяет await
в терминах tryAwait
:
await = tryAwait >>= maybe discard return
Мой вопрос таков: если я пишу код, ориентированный на более простую реализацию Pipes (используя await
и yield
), используя тот же код, будет ли он вести себя одинаково, если я перейду к реализации защищенного канала? Другими словами, может ли защищенный код трубы рассматриваться как просто надстрочный код трубы с точки зрения поведения?