Haskell Pipes - Liefert den Rückgabewert des letzten Proxy in der Pipeline

Sagen wir, ich habe zweiProxy in Haskell Pipes. Sie stellen externe Systemprozesse dar.

produce :: MonadIO m => Producer ByteString m ExitCode
consume :: MonadIO m => Consumer ByteString m ExitCode

So hänge ich sie in einEffect, so was

effect :: Effect m ExitCode
effect = produce >-> consume

DiesEffect wird mir das @ gebExitCode vom erstenProxy das endet. Normalerweise ist dies dasproduce, nicht derconsume. Was ist die idiomatische Pipes-Methode, um den Rückgabewert des @ zu erhalteconsume auch wenn es nicht zuerst beendet wird?

So weit ich denke, ist dies nicht möglich, ohne eine Art icky In-Band-Signalisierung zu tun, so dass dieconsume weiß, dass der Stream fertig ist. Der letzte Proxy kann nur herunterfahren, indem er etwas von einem @ abrufawait, damit ich ein leeres @ schicken kaByteString, um zu signalisieren, dass der Stream fertig ist. Das fühlt sich aber einfach nicht richtig an. Was ich jetzt habe, ist eine separate MVar, die den Exit-Wert bereitstellen kann, aber ich denke, dass es eine idiomatischere Möglichkeit geben muss, dies zu tun.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage