Haskell Pipes - obtenha o valor de retorno do último Proxy no pipeline
Digamos que eu tenho doisProxy
em tubos Haskell. Eles representam processos externos do sistema.
produce :: MonadIO m => Producer ByteString m ExitCode
consume :: MonadIO m => Consumer ByteString m ExitCode
Então eu coloco eles em umEffect
, como isso:
effect :: Effect m ExitCode
effect = produce >-> consume
esteEffect
vai me dar oExitCode
desde o primeiroProxy
que termina. Normalmente, este será oproduce
, não oconsume
. Qual é a maneira idiomática de Pipes para obter o valor de retorno doconsume
mesmo que não termine primeiro?
Até agora, estou pensando que isso não é possível sem fazer algum tipo de sinalização nojenta para a banda.consume
sabe que o fluxo está pronto. A única maneira que o último Proxy sabe desligar é obter algo de umawait
, para que eu pudesse enviar um vazioByteString
para sinalizar que o fluxo está concluído. Mas isso não parece certo. O que eu tenho agora é um MVar separado que pode fornecer o valor de saída, mas estou pensando que deve haver uma maneira mais idiomática de fazer isso.