<div dir="ltr">Hi,<div><br></div><div>I've got a conduit thing that yields infinitely many values and never exits, which I've given the type <a href="https://hackage.haskell.org/package/conduit-1.2.6/docs/Data-Conduit.html#t:ConduitM" style="font-size:13px;margin:0px;padding:0px;text-decoration:none;color:rgb(171,105,84);font-family:monospace;line-height:16.12px">ConduitM</a><span style="font-size:13px;color:rgb(0,0,0);font-family:monospace;line-height:16.12px;background-color:rgb(240,240,240)"> () o m Void</span> - a bit like <a name="t:Source" class="" style="font-size:13px;margin:0px;padding:0px;font-weight:bold;color:rgb(0,0,0);font-family:monospace;line-height:16.12px">Source</a><span style="font-size:13px;color:rgb(0,0,0);font-family:monospace;line-height:16.12px;background-color:rgb(240,240,240)"> m o = </span><a href="https://hackage.haskell.org/package/conduit-1.2.6/docs/Data-Conduit.html#t:ConduitM" style="font-size:13px;margin:0px;padding:0px;text-decoration:none;color:rgb(171,105,84);font-family:monospace;line-height:16.12px">ConduitM</a><span style="font-size:13px;color:rgb(0,0,0);font-family:monospace;line-height:16.12px;background-color:rgb(240,240,240)"> () o m ()</span> except that it can't exit due to the <span style="font-size:13px;color:rgb(0,0,0);font-family:monospace;line-height:16.12px;background-color:rgb(240,240,240)">Void</span>.</div><div><br></div><div>(One side-question: why is <a name="t:Source" class="" style="font-size:13px;color:rgb(0,0,0);margin:0px;padding:0px;font-weight:bold;font-family:monospace;line-height:16.12px">Source</a><span style="font-size:13px;color:rgb(0,0,0);font-family:monospace;line-height:16.12px;background-color:rgb(240,240,240)"> m o</span> not <a href="https://hackage.haskell.org/package/conduit-1.2.6/docs/Data-Conduit.html#t:ConduitM" style="font-size:13px;color:rgb(171,105,84);margin:0px;padding:0px;text-decoration:none;font-family:monospace;line-height:16.12px">ConduitM</a><span style="font-size:13px;color:rgb(0,0,0);font-family:monospace;line-height:16.12px;background-color:rgb(240,240,240)"> Void o m ()</span>?)</div><div><br></div><div>I would now like to get the first item it yields; I'm currently using <font face="monospace, monospace">Data.Conduit.List.head</font> but of course this returns a <font face="monospace, monospace">Maybe o</font> in case the upstream thing exits. Is there a way to do this without that <font face="monospace, monospace">Maybe</font>? I can't see anything obvious, but nor can I think of a terribly good reason why not.<br></div><div><br></div><div>One thing that I was pondering was a kind of fuse operator with a type like ...</div><div><br></div><div><a href="https://hackage.haskell.org/package/conduit-1.2.6/docs/Data-Conduit.html#t:ConduitM" style="font-size:13px;margin:0px;padding:0px;text-decoration:none;color:rgb(171,105,84);font-family:monospace;line-height:16.12px">ConduitM</a><span style="font-size:13px;color:rgb(0,0,0);font-family:monospace;line-height:16.12px;background-color:rgb(240,240,240)"> a b m r1 -> </span><a href="https://hackage.haskell.org/package/conduit-1.2.6/docs/Data-Conduit.html#t:ConduitM" style="font-size:13px;margin:0px;padding:0px;text-decoration:none;color:rgb(171,105,84);font-family:monospace;line-height:16.12px">ConduitM</a><span style="font-size:13px;color:rgb(0,0,0);font-family:monospace;line-height:16.12px;background-color:rgb(240,240,240)"> b c m r2 -> </span><a href="https://hackage.haskell.org/package/conduit-1.2.6/docs/Data-Conduit.html#t:ConduitM" style="font-size:13px;margin:0px;padding:0px;text-decoration:none;color:rgb(171,105,84);font-family:monospace;line-height:16.12px">ConduitM</a><span style="font-size:13px;color:rgb(0,0,0);font-family:monospace;line-height:16.12px;background-color:rgb(240,240,240)"> a c m (Either r1 r2)</span></div><div><br></div><div>... which returns the result of whichever thing exits first. Does such a thing exist? Does it even make sense? If it existed, I think I could use it here as it'd specialise to</div><div><br></div><div><a href="https://hackage.haskell.org/package/conduit-1.2.6/docs/Data-Conduit.html#t:ConduitM" style="font-size:13px;color:rgb(171,105,84);margin:0px;padding:0px;text-decoration:none;font-family:monospace;line-height:16.12px">ConduitM</a><span style="font-size:13px;color:rgb(0,0,0);font-family:monospace;line-height:16.12px;background-color:rgb(240,240,240)"> () o m Void -> </span><a href="https://hackage.haskell.org/package/conduit-1.2.6/docs/Data-Conduit.html#t:ConduitM" style="font-size:13px;color:rgb(171,105,84);margin:0px;padding:0px;text-decoration:none;font-family:monospace;line-height:16.12px">ConduitM</a><span style="font-size:13px;color:rgb(0,0,0);font-family:monospace;line-height:16.12px;background-color:rgb(240,240,240)"> o Void m o -> </span><a href="https://hackage.haskell.org/package/conduit-1.2.6/docs/Data-Conduit.html#t:ConduitM" style="font-size:13px;color:rgb(171,105,84);margin:0px;padding:0px;text-decoration:none;font-family:monospace;line-height:16.12px">ConduitM</a><span style="font-size:13px;color:rgb(0,0,0);font-family:monospace;line-height:16.12px;background-color:rgb(240,240,240)"> () Void m (Either Void o)</span><br></div><div><span style="font-size:13px;color:rgb(0,0,0);font-family:monospace;line-height:16.12px;background-color:rgb(240,240,240)"><br></span></div><div>and of course <span style="font-size:13px;color:rgb(0,0,0);font-family:monospace;line-height:16.12px;background-color:rgb(240,240,240)">(Either Void o)</span> is isomorphic to <span style="font-size:13px;color:rgb(0,0,0);font-family:monospace;line-height:16.12px;background-color:rgb(240,240,240)">o</span> so I'd be home and dry.</div><div><br></div><div>Having written this, I'm now also struggling to work out what the thing of type <a href="https://hackage.haskell.org/package/conduit-1.2.6/docs/Data-Conduit.html#t:ConduitM" style="font-size:13px;color:rgb(171,105,84);margin:0px;padding:0px;text-decoration:none;font-family:monospace;line-height:16.12px">ConduitM</a><span style="font-size:13px;color:rgb(0,0,0);font-family:monospace;line-height:16.12px;background-color:rgb(240,240,240)"> o Void m o</span> would be. Maybe I'm going about this all the wrong way, or maybe I'm just confused?</div><div><br></div><div>Any help greatly appreciated!</div><div><br></div><div>Cheers,</div><div><br></div><div>David</div><div><br></div><div><br></div></div>