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.