Я пытаюсь понять различия между различными реализациями концепции труб. Одна из отличий между трубопроводом и трубами заключается в том, как они соединяют трубы вместе. Канал имеет
(>+>) :: Monad m
=> Pipe l a b r0 m r1 -> Pipe Void b c r1 m r2 -> Pipe l a c r0 m r2
а трубы имеют
(>->) :: (Monad m, Proxy p)
=> (b' -> p a' a b' b m r) -> (c' -> p b' b c' c m r) -> c' -> p a' a c' c m r
Если я правильно ее понимаю, с трубами, когда какой-либо труба из двух остановок, его результат возвращается, а другой - остановлен. С кабелепроводом, если левая труба закончена, ее результат направляется вниз по направлению к правой трубе.
Интересно, в чем преимущество подхода кабелепровода? Я хотел бы увидеть некоторый пример (желательно в реальном мире), который легко реализовать с использованием кабелепровода и >+>
, но hard (er) для реализации с использованием труб и >->
.