Допустим, у меня есть два Proxy
в Haskell Pipes. Они представляют внешние системные процессы.
produce :: MonadIO m => Producer ByteString m ExitCode
consume :: MonadIO m => Consumer ByteString m ExitCode
Поэтому я подключаю их к Effect
, вот так:
effect :: Effect m ExitCode
effect = produce >-> consume
Этот Effect
даст мне ExitCode
из первого завершающегося Proxy
. Обычно это будет produce
, а не consume
. Какой идиоматический способ Pipes получить возвращаемое значение consume
, даже если оно не завершается первым?
До сих пор я думаю, что это невозможно без какой-то странной внутриполосной сигнализации, поэтому consume
знает, что поток выполнен. Единственный способ завершить работу последнего прокси — это получить что-то от await
, чтобы я мог послать ему пустой ByteString
, чтобы сигнализировать об окончании потока. Это просто не кажется правильным. Теперь у меня есть отдельный MVar, который может предоставить значение выхода, но я думаю, что должен быть более идиоматический способ сделать это.