</span><span id="line-53"></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-consensus-0.3.1.0/noopt/doc/html/ouroboros-consensus/src"><span class="hs-identifier">BlockNodeToClientVersion</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-consensus-0.3.1.0/noopt/doc/html/ouroboros-consensus/src"><span class="hs-identifier">supportedNodeToClientVersions</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-54"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-consensus-0.3.1.0/noopt/doc/html/ouroboros-consensus/src"><span class="hs-identifier">Ouroboros.Consensus.Node.Run</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-consensus-0.3.1.0/noopt/doc/html/ouroboros-consensus/src"><span class="hs-identifier">RunNode</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-55"></span><span>
</span><span id="line-56"></span><span id="local-6989586621679180335"><span id="local-6989586621679180336"><span id="local-6989586621679180337"><span class="annot"><a href="Cardano.Client.Subscription.html#subscribe"><span class="hs-identifier hs-type">subscribe</span></a></span><span> </span><span class="hs-glyph">::</span><span>
</span><span id="line-57"></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-consensus-0.3.1.0/noopt/doc/html/ouroboros-consensus/src"><span class="hs-identifier hs-type">RunNode</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180337"><span class="hs-identifier hs-type">blk</span></a></span><span>
</span><span id="line-56"></span><span id="local-6989586621679180362"><span id="local-6989586621679180363"><span id="local-6989586621679180364"><span class="annot"><a href="Cardano.Client.Subscription.html#subscribe"><span class="hs-identifier hs-type">subscribe</span></a></span><span> </span><span class="hs-glyph">::</span><span>
</span><span id="line-57"></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-consensus-0.3.1.0/noopt/doc/html/ouroboros-consensus/src"><span class="hs-identifier hs-type">RunNode</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180364"><span class="hs-identifier hs-type">blk</span></a></span><span>
</span><span id="line-58"></span><span> </span><span class="hs-glyph">=></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-framework-0.3.0.0/noopt/doc/html/ouroboros-network-framework/src"><span class="hs-identifier hs-type">Snocket.LocalSnocket</span></a></span><span>
</span><span id="line-59"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-consensus-0.3.1.0/noopt/doc/html/ouroboros-consensus/src"><span class="hs-identifier hs-type">CodecConfig</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180337"><span class="hs-identifier hs-type">blk</span></a></span><span>
</span><span id="line-59"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-consensus-0.3.1.0/noopt/doc/html/ouroboros-consensus/src"><span class="hs-identifier hs-type">CodecConfig</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180364"><span class="hs-identifier hs-type">blk</span></a></span><span>
</span><span id="line-60"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-api-0.1.0.0/noopt/doc/html/ouroboros-network-api/src"><span class="hs-identifier hs-type">NetworkMagic</span></a></span><span>
</span><span id="line-61"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-0.4.0.1/noopt/doc/html/ouroboros-network/src"><span class="hs-identifier hs-type">NetworkClientSubcriptionTracers</span></a></span><span>
</span><span id="line-62"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-framework-0.3.0.0/noopt/doc/html/ouroboros-network-framework/src"><span class="hs-identifier hs-type">ClientSubscriptionParams</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
</span><span id="line-63"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-special">(</span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-api-0.1.0.0/noopt/doc/html/ouroboros-network-api/src"><span class="hs-identifier hs-type">NodeToClientVersion</span></a></span><span>
</span><span id="line-64"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-consensus-diffusion-0.3.1.0/noopt/doc/html/ouroboros-consensus-diffusion/src"><span class="hs-identifier hs-type">ClientCodecs</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180337"><span class="hs-identifier hs-type">blk</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/ghc-prim-0.6.1/src"><span class="hs-identifier hs-type">IO</span></a></span><span>
</span><span id="line-64"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-consensus-diffusion-0.3.1.0/noopt/doc/html/ouroboros-consensus-diffusion/src"><span class="hs-identifier hs-type">ClientCodecs</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180364"><span class="hs-identifier hs-type">blk</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/ghc-prim-0.6.1/src"><span class="hs-identifier hs-type">IO</span></a></span><span>
</span><span id="line-65"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-framework-0.3.0.0/noopt/doc/html/ouroboros-network-framework/src"><span class="hs-identifier hs-type">ConnectionId</span></a></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-framework-0.3.0.0/noopt/doc/html/ouroboros-network-framework/src"><span class="hs-identifier hs-type">LocalAddress</span></a></span><span>
</span><span id="line-66"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-0.4.0.1/noopt/doc/html/ouroboros-network/src"><span class="hs-identifier hs-type">NodeToClientProtocols</span></a></span><span> </span><span class="hs-special">'</span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/network-mux-0.3.0.0/noopt/doc/html/network-mux/src"><span class="hs-identifier hs-type">InitiatorMode</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-type">BSL.ByteString</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/ghc-prim-0.6.1/src"><span class="hs-identifier hs-type">IO</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180336"><span class="hs-identifier hs-type">x</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180335"><span class="hs-identifier hs-type">y</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-66"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-0.4.0.1/noopt/doc/html/ouroboros-network/src"><span class="hs-identifier hs-type">NodeToClientProtocols</span></a></span><span> </span><span class="hs-special">'</span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/network-mux-0.3.0.0/noopt/doc/html/network-mux/src"><span class="hs-identifier hs-type">InitiatorMode</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-type">BSL.ByteString</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/ghc-prim-0.6.1/src"><span class="hs-identifier hs-type">IO</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180363"><span class="hs-identifier hs-type">x</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180362"><span class="hs-identifier hs-type">y</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-67"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/ghc-prim-0.6.1/src"><span class="hs-identifier hs-type">IO</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Void</span></a></span></span></span></span><span>
</span><span id="line-68"></span><span id="subscribe"><span class="annot"><span class="annottext">subscribe :: LocalSnocket
-> CodecConfig blk
-> ConnectionId LocalAddress
-> NodeToClientProtocols 'InitiatorMode ByteString IO x y)
-> IO Void
</span><a href="Cardano.Client.Subscription.html#subscribe"><span class="hs-identifier hs-var hs-var">subscribe</span></a></span></span><span> </span><span id="local-6989586621679180334"><span class="annot"><span class="annottext">LocalSnocket
</span><a href="#local-6989586621679180334"><span class="hs-identifier hs-var">snocket</span></a></span></span><span> </span><span id="local-6989586621679180333"><span class="annot"><span class="annottext">CodecConfig blk
</span><a href="#local-6989586621679180333"><span class="hs-identifier hs-var">codecConfig</span></a></span></span><span> </span><span id="local-6989586621679180332"><span class="annot"><span class="annottext">NetworkMagic
</span><a href="#local-6989586621679180332"><span class="hs-identifier hs-var">networkMagic</span></a></span></span><span> </span><span id="local-6989586621679180331"><span class="annot"><span class="annottext">NetworkClientSubcriptionTracers
</span><a href="#local-6989586621679180331"><span class="hs-identifier hs-var">tracers</span></a></span></span><span> </span><span id="local-6989586621679180330"><span class="annot"><span class="annottext">ClientSubscriptionParams ()
</span><a href="#local-6989586621679180330"><span class="hs-identifier hs-var">subscriptionParams</span></a></span></span><span> </span><span id="local-6989586621679180329"><span class="annot"><span class="annottext">NodeToClientVersion
</span><a href="Cardano.Client.Subscription.html#subscribe"><span class="hs-identifier hs-var hs-var">subscribe</span></a></span></span><span> </span><span id="local-6989586621679180361"><span class="annot"><span class="annottext">LocalSnocket
</span><a href="#local-6989586621679180361"><span class="hs-identifier hs-var">snocket</span></a></span></span><span> </span><span id="local-6989586621679180360"><span class="annot"><span class="annottext">CodecConfig blk
</span><a href="#local-6989586621679180360"><span class="hs-identifier hs-var">codecConfig</span></a></span></span><span> </span><span id="local-6989586621679180359"><span class="annot"><span class="annottext">NetworkMagic
</span><a href="#local-6989586621679180359"><span class="hs-identifier hs-var">networkMagic</span></a></span></span><span> </span><span id="local-6989586621679180358"><span class="annot"><span class="annottext">NetworkClientSubcriptionTracers
</span><a href="#local-6989586621679180358"><span class="hs-identifier hs-var">tracers</span></a></span></span><span> </span><span id="local-6989586621679180357"><span class="annot"><span class="annottext">ClientSubscriptionParams ()
</span><a href="#local-6989586621679180357"><span class="hs-identifier hs-var">subscriptionParams</span></a></span></span><span> </span><span id="local-6989586621679180356"><span class="annot"><span class="annottext">NodeToClientVersion
-> ClientCodecs blk IO
-> ConnectionId LocalAddress
-> NodeToClientProtocols 'InitiatorMode ByteString IO x y
</span><a href="#local-6989586621679180329"><span class="hs-identifier hs-var">protocols</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-69"></span><span> </span><span id="local-6989586621679180328"><span class="annot"><span class="annottext">NetworkMutableState LocalAddress
</span><a href="#local-6989586621679180328"><span class="hs-identifier hs-var">networkState</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">IO (NetworkMutableState LocalAddress)
</span><a href="#local-6989586621679180356"><span class="hs-identifier hs-var">protocols</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-69"></span><span> </span><span id="local-6989586621679180355"><span class="annot"><span class="annottext">NetworkMutableState LocalAddress
</span><a href="#local-6989586621679180355"><span class="hs-identifier hs-var">networkState</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">IO (NetworkMutableState LocalAddress)
forall addr. IO (NetworkMutableState addr)
</span><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-framework-0.3.0.0/noopt/doc/html/ouroboros-network-framework/src"><span class="hs-identifier hs-var">newNetworkMutableState</span></a></span><span>
</span><span id="line-70"></span><span> </span><span class="annot"><span class="annottext">LocalSnocket
-> IO Void
</span><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-0.4.0.1/noopt/doc/html/ouroboros-network/src"><span class="hs-identifier hs-var">ncSubscriptionWorker</span></a></span><span>
</span><span id="line-71"></span><span> </span><span class="annot"><span class="annottext">LocalSnocket
</span><a href="#local-6989586621679180334"><span class="hs-identifier hs-var">snocket</span></a></span><span>
</span><a href="#local-6989586621679180361"><span class="hs-identifier hs-var">snocket</span></a></span><span>
</span><span id="line-72"></span><span> </span><span class="annot"><span class="annottext">NetworkClientSubcriptionTracers
</span><a href="#local-6989586621679180331"><span class="hs-identifier hs-var">tracers</span></a></span><span>
</span><a href="#local-6989586621679180358"><span class="hs-identifier hs-var">tracers</span></a></span><span>
</span><span id="line-73"></span><span> </span><span class="annot"><span class="annottext">NetworkMutableState LocalAddress
</span><a href="#local-6989586621679180328"><span class="hs-identifier hs-var">networkState</span></a></span><span>
</span><a href="#local-6989586621679180355"><span class="hs-identifier hs-var">networkState</span></a></span><span>
</span><span id="line-74"></span><span> </span><span class="annot"><span class="annottext">ClientSubscriptionParams ()
</span><a href="#local-6989586621679180330"><span class="hs-identifier hs-var">subscriptionParams</span></a></span><span>
</span><a href="#local-6989586621679180357"><span class="hs-identifier hs-var">subscriptionParams</span></a></span><span>
</span><span id="line-75"></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CodecConfig blk
-> NetworkMagic
-> (NodeToClientVersion
NodeToClientVersionData
(OuroborosApplication appType LocalAddress bytes m a b)
</span><a href="Cardano.Client.Subscription.html#versionedProtocols"><span class="hs-identifier hs-var">versionedProtocols</span></a></span><span> </span><span class="annot"><span class="annottext">CodecConfig blk
</span><a href="#local-6989586621679180333"><span class="hs-identifier hs-var">codecConfig</span></a></span><span> </span><span class="annot"><span class="annottext">NetworkMagic
</span><a href="#local-6989586621679180332"><span class="hs-identifier hs-var">networkMagic</span></a></span><span>
</span><span id="line-76"></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span id="local-6989586621679180326"><span class="annot"><span class="annottext">NodeToClientVersion
</span><a href="#local-6989586621679180326"><span class="hs-identifier hs-var">version</span></a></span></span><span> </span><span id="local-6989586621679180325"><span class="annot"><span class="annottext">ClientCodecs blk IO
</span><a href="#local-6989586621679180325"><span class="hs-identifier hs-var">codecs</span></a></span></span><span> </span><span id="local-6989586621679180324"><span class="annot"><span class="annottext">ConnectionId LocalAddress
</span><a href="#local-6989586621679180324"><span class="hs-identifier hs-var">connectionId</span></a></span></span><span> </span><span class="annot"><span class="annottext">STM IO ControlMessage
</span><a href="#local-6989586621679180360"><span class="hs-identifier hs-var">codecConfig</span></a></span><span> </span><span class="annot"><span class="annottext">NetworkMagic
</span><a href="#local-6989586621679180359"><span class="hs-identifier hs-var">networkMagic</span></a></span><span>
</span><span id="line-76"></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span id="local-6989586621679180353"><span class="annot"><span class="annottext">NodeToClientVersion
</span><a href="#local-6989586621679180353"><span class="hs-identifier hs-var">version</span></a></span></span><span> </span><span id="local-6989586621679180352"><span class="annot"><span class="annottext">ClientCodecs blk IO
</span><a href="#local-6989586621679180352"><span class="hs-identifier hs-var">codecs</span></a></span></span><span> </span><span id="local-6989586621679180351"><span class="annot"><span class="annottext">ConnectionId LocalAddress
</span><a href="#local-6989586621679180351"><span class="hs-identifier hs-var">connectionId</span></a></span></span><span> </span><span class="annot"><span class="annottext">STM IO ControlMessage
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-></span><span>
</span><span id="line-77"></span><span> </span><span class="annot"><span class="annottext">NodeToClientVersion
-> ClientCodecs blk IO
-> ConnectionId LocalAddress
-> NodeToClientProtocols 'InitiatorMode ByteString IO x y
</span><a href="#local-6989586621679180329"><span class="hs-identifier hs-var">protocols</span></a></span><span> </span><span class="annot"><span class="annottext">NodeToClientVersion
</span><a href="#local-6989586621679180326"><span class="hs-identifier hs-var">version</span></a></span><span> </span><span class="annot"><span class="annottext">ClientCodecs blk IO
</span><a href="#local-6989586621679180325"><span class="hs-identifier hs-var">codecs</span></a></span><span> </span><span class="annot"><span class="annottext">ConnectionId LocalAddress
</span><a href="#local-6989586621679180324"><span class="hs-identifier hs-var">connectionId</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><a href="#local-6989586621679180356"><span class="hs-identifier hs-var">protocols</span></a></span><span> </span><span class="annot"><span class="annottext">NodeToClientVersion
</span><a href="#local-6989586621679180353"><span class="hs-identifier hs-var">version</span></a></span><span> </span><span class="annot"><span class="annottext">ClientCodecs blk IO
</span><a href="#local-6989586621679180352"><span class="hs-identifier hs-var">codecs</span></a></span><span> </span><span class="annot"><span class="annottext">ConnectionId LocalAddress
</span><a href="#local-6989586621679180351"><span class="hs-identifier hs-var">connectionId</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-78"></span><span>
</span><span id="line-79"></span><span class="annot"><a href="Cardano.Client.Subscription.html#versionedProtocols"><span class="hs-identifier hs-type">versionedProtocols</span></a></span><span> </span><span class="hs-glyph">::</span><span>
</span><span id="line-80"></span><span> </span><span class="hs-keyword">forall</span><span> </span><span id="local-6989586621679180395"><span class="annot"><a href="#local-6989586621679180395"><span class="hs-identifier hs-type">blk</span></a></span></span><span> </span><span id="local-6989586621679180397"><span class="annot"><a href="#local-6989586621679180397"><span class="hs-identifier hs-type">m</span></a></span></span><span> </span><span id="local-6989586621679180393"><span class="annot"><a href="#local-6989586621679180393"><span class="hs-identifier hs-type">appType</span></a></span></span><span> </span><span id="local-6989586621679180392"><span class="annot"><a href="#local-6989586621679180392"><span class="hs-identifier hs-type">bytes</span></a></span></span><span> </span><span id="local-6989586621679180391"><span class="annot"><a href="#local-6989586621679180391"><span class="hs-identifier hs-type">a</span></a></span></span><span> </span><span id="local-6989586621679180390"><span class="annot"><a href="#local-6989586621679180390"><span class="hs-identifier hs-type">b</span></a></span></span><span class="hs-operator">.</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="hs-identifier hs-type">MonadST</span></span><span> </span><span class="annot"><a href="#local-6989586621679180397"><span class="hs-identifier hs-type">m</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-consensus-0.3.1.0/noopt/doc/html/ouroboros-consensus/src"><span class="hs-identifier hs-type">RunNode</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180395"><span class="hs-identifier hs-type">blk</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-81"></span><span> </span><span class="hs-glyph">=></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-consensus-0.3.1.0/noopt/doc/html/ouroboros-consensus/src"><span class="hs-identifier hs-type">CodecConfig</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180395"><span class="hs-identifier hs-type">blk</span></a></span><span>
</span><span id="line-80"></span><span> </span><span class="hs-keyword">forall</span><span> </span><span id="local-6989586621679180422"><span class="annot"><a href="#local-6989586621679180422"><span class="hs-identifier hs-type">blk</span></a></span></span><span> </span><span id="local-6989586621679180424"><span class="annot"><a href="#local-6989586621679180424"><span class="hs-identifier hs-type">m</span></a></span></span><span> </span><span id="local-6989586621679180420"><span class="annot"><a href="#local-6989586621679180420"><span class="hs-identifier hs-type">appType</span></a></span></span><span> </span><span id="local-6989586621679180419"><span class="annot"><a href="#local-6989586621679180419"><span class="hs-identifier hs-type">bytes</span></a></span></span><span> </span><span id="local-6989586621679180418"><span class="annot"><a href="#local-6989586621679180418"><span class="hs-identifier hs-type">a</span></a></span></span><span> </span><span id="local-6989586621679180417"><span class="annot"><a href="#local-6989586621679180417"><span class="hs-identifier hs-type">b</span></a></span></span><span class="hs-operator">.</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="hs-identifier hs-type">MonadST</span></span><span> </span><span class="annot"><a href="#local-6989586621679180424"><span class="hs-identifier hs-type">m</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-consensus-0.3.1.0/noopt/doc/html/ouroboros-consensus/src"><span class="hs-identifier hs-type">RunNode</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180422"><span class="hs-identifier hs-type">blk</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-81"></span><span> </span><span class="hs-glyph">=></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-consensus-0.3.1.0/noopt/doc/html/ouroboros-consensus/src"><span class="hs-identifier hs-type">CodecConfig</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180422"><span class="hs-identifier hs-type">blk</span></a></span><span>
</span><span id="line-82"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-api-0.1.0.0/noopt/doc/html/ouroboros-network-api/src"><span class="hs-identifier hs-type">NetworkMagic</span></a></span><span>
</span><span id="line-83"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-special">(</span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-api-0.1.0.0/noopt/doc/html/ouroboros-network-api/src"><span class="hs-identifier hs-type">NodeToClientVersion</span></a></span><span>
</span><span id="line-84"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-consensus-diffusion-0.3.1.0/noopt/doc/html/ouroboros-consensus-diffusion/src"><span class="hs-identifier hs-type">ClientCodecs</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180395"><span class="hs-identifier hs-type">blk</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180397"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-84"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-consensus-diffusion-0.3.1.0/noopt/doc/html/ouroboros-consensus-diffusion/src"><span class="hs-identifier hs-type">ClientCodecs</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180422"><span class="hs-identifier hs-type">blk</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180424"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-85"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-framework-0.3.0.0/noopt/doc/html/ouroboros-network-framework/src"><span class="hs-identifier hs-type">ConnectionId</span></a></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-framework-0.3.0.0/noopt/doc/html/ouroboros-network-framework/src"><span class="hs-identifier hs-type">LocalAddress</span></a></span><span>
</span><span id="line-86"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="hs-identifier hs-type">STM</span></span><span> </span><span class="annot"><a href="#local-6989586621679180397"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-api-0.1.0.0/noopt/doc/html/ouroboros-network-api/src"><span class="hs-identifier hs-type">ControlMessage</span></a></span><span>
</span><span id="line-87"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-0.4.0.1/noopt/doc/html/ouroboros-network/src"><span class="hs-identifier hs-type">NodeToClientProtocols</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180393"><span class="hs-identifier hs-type">appType</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180392"><span class="hs-identifier hs-type">bytes</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180397"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180391"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180390"><span class="hs-identifier hs-type">b</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-86"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="hs-identifier hs-type">STM</span></span><span> </span><span class="annot"><a href="#local-6989586621679180424"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-api-0.1.0.0/noopt/doc/html/ouroboros-network-api/src"><span class="hs-identifier hs-type">ControlMessage</span></a></span><span>
</span><span id="line-87"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-0.4.0.1/noopt/doc/html/ouroboros-network/src"><span class="hs-identifier hs-type">NodeToClientProtocols</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180420"><span class="hs-identifier hs-type">appType</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180419"><span class="hs-identifier hs-type">bytes</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180424"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180418"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180417"><span class="hs-identifier hs-type">b</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-88"></span><span> </span><span class="hs-comment">-- ^ callback which receives codecs, connection id and STM action which</span><span>
</span><span id="line-89"></span><span> </span><span class="hs-comment">-- can be checked if the networking runtime system requests the protocols</span><span>
</span><span id="line-90"></span><span> </span><span class="hs-comment">-- to stop.</span><span>
</span><span id="line-95"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-framework-0.3.0.0/noopt/doc/html/ouroboros-network-framework/src"><span class="hs-identifier hs-type">Versions</span></a></span><span>
</span><span id="line-96"></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-api-0.1.0.0/noopt/doc/html/ouroboros-network-api/src"><span class="hs-identifier hs-type">NodeToClientVersion</span></a></span><span>
</span><span id="line-97"></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-api-0.1.0.0/noopt/doc/html/ouroboros-network-api/src"><span class="hs-identifier hs-type">NodeToClientVersionData</span></a></span><span>
</span><span id="line-98"></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-framework-0.3.0.0/noopt/doc/html/ouroboros-network-framework/src"><span class="hs-identifier hs-type">OuroborosApplication</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180393"><span class="hs-identifier hs-type">appType</span></a></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-framework-0.3.0.0/noopt/doc/html/ouroboros-network-framework/src"><span class="hs-identifier hs-type">LocalAddress</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180392"><span class="hs-identifier hs-type">bytes</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180397"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180391"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180390"><span class="hs-identifier hs-type">b</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-98"></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-framework-0.3.0.0/noopt/doc/html/ouroboros-network-framework/src"><span class="hs-identifier hs-type">OuroborosApplication</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180420"><span class="hs-identifier hs-type">appType</span></a></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-framework-0.3.0.0/noopt/doc/html/ouroboros-network-framework/src"><span class="hs-identifier hs-type">LocalAddress</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180419"><span class="hs-identifier hs-type">bytes</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180424"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180418"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180417"><span class="hs-identifier hs-type">b</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-99"></span><span id="versionedProtocols"><span class="annot"><span class="annottext">versionedProtocols :: CodecConfig blk
-> NetworkMagic
-> (NodeToClientVersion
NodeToClientVersion
NodeToClientVersionData
(OuroborosApplication appType LocalAddress bytes m a b)
</span><a href="Cardano.Client.Subscription.html#versionedProtocols"><span class="hs-identifier hs-var hs-var">versionedProtocols</span></a></span></span><span> </span><span id="local-6989586621679180323"><span class="annot"><span class="annottext">CodecConfig blk
</span><a href="#local-6989586621679180323"><span class="hs-identifier hs-var">codecConfig</span></a></span></span><span> </span><span id="local-6989586621679180322"><span class="annot"><span class="annottext">NetworkMagic
</span><a href="#local-6989586621679180322"><span class="hs-identifier hs-var">networkMagic</span></a></span></span><span> </span><span id="local-6989586621679180321"><span class="annot"><span class="annottext">NodeToClientVersion
</span><a href="Cardano.Client.Subscription.html#versionedProtocols"><span class="hs-identifier hs-var hs-var">versionedProtocols</span></a></span></span><span> </span><span id="local-6989586621679180350"><span class="annot"><span class="annottext">CodecConfig blk
</span><a href="#local-6989586621679180350"><span class="hs-identifier hs-var">codecConfig</span></a></span></span><span> </span><span id="local-6989586621679180349"><span class="annot"><span class="annottext">NetworkMagic
</span><a href="#local-6989586621679180349"><span class="hs-identifier hs-var">networkMagic</span></a></span></span><span> </span><span id="local-6989586621679180348"><span class="annot"><span class="annottext">NodeToClientVersion
-> ClientCodecs blk m
-> ConnectionId LocalAddress
-> STM m ControlMessage
-> NodeToClientProtocols appType bytes m a b
</span><a href="#local-6989586621679180321"><span class="hs-identifier hs-var">callback</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><a href="#local-6989586621679180348"><span class="hs-identifier hs-var">callback</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-100"></span><span> </span><span class="annot"><span class="annottext">((NodeToClientVersion, BlockNodeToClientVersion blk)
-> Versions
NodeToClientVersion
NodeToClientVersion
NodeToClientVersionData
(OuroborosApplication appType LocalAddress bytes m a b)
</span><a href="#local-6989586621679180320"><span class="hs-identifier hs-var">applyVersion</span></a></span><span> </span><span class="annot"><span class="annottext">([(NodeToClientVersion, BlockNodeToClientVersion blk)]
</span><a href="#local-6989586621679180347"><span class="hs-identifier hs-var">applyVersion</span></a></span><span> </span><span class="annot"><span class="annottext">([(NodeToClientVersion, BlockNodeToClientVersion blk)]
-> Versions
NodeToClientVersion
NodeToClientVersionData
Proxy blk -> Map NodeToClientVersion (BlockNodeToClientVersion blk)
</span><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-consensus-0.3.1.0/noopt/doc/html/ouroboros-consensus/src"><span class="hs-identifier hs-var">supportedNodeToClientVersions</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Proxy blk
forall k (t :: k). Proxy t
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-var">Proxy</span></a></span><span> </span><span class="hs-glyph">@</span><span class="annot"><a href="#local-6989586621679180395"><span class="hs-identifier hs-type">blk</span></a></span><span class="hs-special">)</span><span>
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-var">Proxy</span></a></span><span> </span><span class="hs-glyph">@</span><span class="annot"><a href="#local-6989586621679180422"><span class="hs-identifier hs-type">blk</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-102"></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-103"></span><span> </span><span class="annot"><a href="#local-6989586621679180320"><span class="hs-identifier hs-type">applyVersion</span></a></span><span> </span><span class="hs-glyph">::</span><span>
</span><span id="line-104"></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-api-0.1.0.0/noopt/doc/html/ouroboros-network-api/src"><span class="hs-identifier hs-type">NodeToClientVersion</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-consensus-0.3.1.0/noopt/doc/html/ouroboros-consensus/src"><span class="hs-identifier hs-type">BlockNodeToClientVersion</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180395"><span class="hs-identifier hs-type">blk</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-103"></span><span> </span><span class="annot"><a href="#local-6989586621679180347"><span class="hs-identifier hs-type">applyVersion</span></a></span><span> </span><span class="hs-glyph">::</span><span>
</span><span id="line-104"></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-api-0.1.0.0/noopt/doc/html/ouroboros-network-api/src"><span class="hs-identifier hs-type">NodeToClientVersion</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-consensus-0.3.1.0/noopt/doc/html/ouroboros-consensus/src"><span class="hs-identifier hs-type">BlockNodeToClientVersion</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180422"><span class="hs-identifier hs-type">blk</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-105"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-framework-0.3.0.0/noopt/doc/html/ouroboros-network-framework/src"><span class="hs-identifier hs-type">Versions</span></a></span><span>
</span><span id="line-106"></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-api-0.1.0.0/noopt/doc/html/ouroboros-network-api/src"><span class="hs-identifier hs-type">NodeToClientVersion</span></a></span><span>
</span><span id="line-107"></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-api-0.1.0.0/noopt/doc/html/ouroboros-network-api/src"><span class="hs-identifier hs-type">NodeToClientVersionData</span></a></span><span>
</span><span id="line-108"></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-framework-0.3.0.0/noopt/doc/html/ouroboros-network-framework/src"><span class="hs-identifier hs-type">OuroborosApplication</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180393"><span class="hs-identifier hs-type">appType</span></a></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-framework-0.3.0.0/noopt/doc/html/ouroboros-network-framework/src"><span class="hs-identifier hs-type">LocalAddress</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180392"><span class="hs-identifier hs-type">bytes</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180397"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180391"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180390"><span class="hs-identifier hs-type">b</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-109"></span><span> </span><span id="local-6989586621679180320"><span class="annot"><span class="annottext">applyVersion :: (NodeToClientVersion, BlockNodeToClientVersion blk)
</span><span id="line-108"></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-framework-0.3.0.0/noopt/doc/html/ouroboros-network-framework/src"><span class="hs-identifier hs-type">OuroborosApplication</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180420"><span class="hs-identifier hs-type">appType</span></a></span><span> </span><span class="annot"><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-framework-0.3.0.0/noopt/doc/html/ouroboros-network-framework/src"><span class="hs-identifier hs-type">LocalAddress</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180419"><span class="hs-identifier hs-type">bytes</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180424"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180418"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679180417"><span class="hs-identifier hs-type">b</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-109"></span><span> </span><span id="local-6989586621679180347"><span class="annot"><span class="annottext">applyVersion :: (NodeToClientVersion, BlockNodeToClientVersion blk)
-> Versions
NodeToClientVersion
NodeToClientVersionData
(OuroborosApplication appType LocalAddress bytes m a b)
</span><a href="#local-6989586621679180320"><span class="hs-identifier hs-var hs-var">applyVersion</span></a></span></span><span> </span><span class="hs-special">(</span><span id="local-6989586621679180317"><span class="annot"><span class="annottext">NodeToClientVersion
</span><a href="#local-6989586621679180317"><span class="hs-identifier hs-var">version</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621679180316"><span class="annot"><span class="annottext">BlockNodeToClientVersion blk
</span><a href="#local-6989586621679180316"><span class="hs-identifier hs-var">blockVersion</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span>
</span><a href="#local-6989586621679180347"><span class="hs-identifier hs-var hs-var">applyVersion</span></a></span></span><span> </span><span class="hs-special">(</span><span id="local-6989586621679180344"><span class="annot"><span class="annottext">NodeToClientVersion
</span><a href="#local-6989586621679180344"><span class="hs-identifier hs-var">version</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621679180343"><span class="annot"><span class="annottext">BlockNodeToClientVersion blk
</span><a href="#local-6989586621679180343"><span class="hs-identifier hs-var">blockVersion</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-110"></span><span> </span><span class="annot"><span class="annottext">NodeToClientVersion
-> NodeToClientVersionData
-> (ConnectionId LocalAddress
(OuroborosApplication appType LocalAddress bytes m a b)
</span><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-0.4.0.1/noopt/doc/html/ouroboros-network/src"><span class="hs-identifier hs-var">versionedNodeToClientProtocols</span></a></span><span>
</span><span id="line-111"></span><span> </span><span class="annot"><span class="annottext">NodeToClientVersion
</span><a href="#local-6989586621679180317"><span class="hs-identifier hs-var">version</span></a></span><span>
</span><a href="#local-6989586621679180344"><span class="hs-identifier hs-var">version</span></a></span><span>
</span><span id="line-112"></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">NetworkMagic -> NodeToClientVersionData
</span><a href="../file:///home/runner/work/ouroboros-network/ouroboros-network/dist-newstyle/build/x86_64-linux/ghc-8.10.7/ouroboros-network-api-0.1.0.0/noopt/doc/html/ouroboros-network-api/src"><span class="hs-identifier hs-var">NodeToClientVersionData</span></a></span><span> </span><span class="annot"><span class="annottext">NetworkMagic
</span><a href="#local-6989586621679180322"><span class="hs-identifier hs-var">networkMagic</span></a></span><span class="hs-special">)</span><span>
</span><a href="#local-6989586621679180349"><span class="hs-identifier hs-var">networkMagic</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-113"></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">NodeToClientVersion
-> ClientCodecs blk m
-> ConnectionId LocalAddress
-> STM m ControlMessage
-> NodeToClientProtocols appType bytes m a b
</span><a href="#local-6989586621679180321"><span class="hs-identifier hs-var">callback</span></a></span><span> </span><span class="annot"><span class="annottext">NodeToClientVersion
"link": "ouroboros-consensus-test/Test-Util-FS-Sim-Error.html#v:corrupt"
},
{
"display_html": "<span class=\"keyword\">data</span> <a href=\"#t:Errors\">Errors</a> = <a href=\"#v:Errors\">Errors</a> {<ul class=\"subs\"><li><a href=\"#v:dumpStateE\">dumpStateE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li><li><a href=\"#v:hOpenE\">hOpenE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li><li><a href=\"#v:hCloseE\">hCloseE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li><li><a href=\"#v:hSeekE\">hSeekE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li><li><a href=\"#v:hGetSomeE\">hGetSomeE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStreamGetSome\" title=\"Test.Util.FS.Sim.Error\">ErrorStreamGetSome</a></li><li><a href=\"#v:hGetSomeAtE\">hGetSomeAtE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStreamGetSome\" title=\"Test.Util.FS.Sim.Error\">ErrorStreamGetSome</a></li><li><a href=\"#v:hPutSomeE\">hPutSomeE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStreamPutSome\" title=\"Test.Util.FS.Sim.Error\">ErrorStreamPutSome</a></li><li><a href=\"#v:hTruncateE\">hTruncateE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li><li><a href=\"#v:hGetSizeE\">hGetSizeE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li><li><a href=\"#v:createDirectoryE\">createDirectoryE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li><li><a href=\"#v:createDirectoryIfMissingE\">createDirectoryIfMissingE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li><li><a href=\"#v:listDirectoryE\">listDirectoryE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li><li><a href=\"#v:doesDirectoryExistE\">doesDirectoryExistE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li><li><a href=\"#v:doesFileExistE\">doesFileExistE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li><li><a href=\"#v:removeFileE\">removeFileE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li><li><a href=\"#v:renameFileE\">renameFileE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li></ul>}",
"name": "Errors Errors createDirectoryE createDirectoryIfMissingE doesDirectoryExistE doesFileExistE dumpStateE hCloseE hGetSizeE hGetSomeAtE hGetSomeE hOpenE hPutSomeE hSeekE hTruncateE listDirectoryE removeFileE renameFileE",
"display_html": "<span class=\"keyword\">data</span> <a href=\"#t:Errors\">Errors</a> = <a href=\"#v:Errors\">Errors</a> {<ul class=\"subs\"><li><a href=\"#v:dumpStateE\">dumpStateE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li><li><a href=\"#v:hOpenE\">hOpenE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li><li><a href=\"#v:hCloseE\">hCloseE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li><li><a href=\"#v:hSeekE\">hSeekE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li><li><a href=\"#v:hGetSomeE\">hGetSomeE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStreamGetSome\" title=\"Test.Util.FS.Sim.Error\">ErrorStreamGetSome</a></li><li><a href=\"#v:hGetSomeAtE\">hGetSomeAtE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStreamGetSome\" title=\"Test.Util.FS.Sim.Error\">ErrorStreamGetSome</a></li><li><a href=\"#v:hPutSomeE\">hPutSomeE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStreamPutSome\" title=\"Test.Util.FS.Sim.Error\">ErrorStreamPutSome</a></li><li><a href=\"#v:hTruncateE\">hTruncateE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li><li><a href=\"#v:hGetSizeE\">hGetSizeE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li><li><a href=\"#v:createDirectoryE\">createDirectoryE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li><li><a href=\"#v:createDirectoryIfMissingE\">createDirectoryIfMissingE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li><li><a href=\"#v:listDirectoryE\">listDirectoryE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li><li><a href=\"#v:doesDirectoryExistE\">doesDirectoryExistE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li><li><a href=\"#v:doesFileExistE\">doesFileExistE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li><li><a href=\"#v:removeDirectoryRecursiveE\">removeDirectoryRecursiveE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li><li><a href=\"#v:removeFileE\">removeFileE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li><li><a href=\"#v:renameFileE\">renameFileE</a> ∷ <a href=\"Test-Util-FS-Sim-Error.html#t:ErrorStream\" title=\"Test.Util.FS.Sim.Error\">ErrorStream</a></li></ul>}",
"name": "Errors Errors createDirectoryE createDirectoryIfMissingE doesDirectoryExistE doesFileExistE dumpStateE hCloseE hGetSizeE hGetSomeAtE hGetSomeE hOpenE hPutSomeE hSeekE hTruncateE listDirectoryE removeDirectoryRecursiveE removeFileE renameFileE",
"module": "Test.Util.FS.Sim.Error",
"link": "ouroboros-consensus-test/Test-Util-FS-Sim-Error.html#t:Errors"
},
"link": "ouroboros-consensus/Ouroboros-Consensus-Storage-FS-API.html#t:Handle"
},
{
"display_html": "<span class=\"keyword\">data</span> <a href=\"#t:HasFS\">HasFS</a> (m ∷ <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Kind.html#t:Type\" title=\"Data.Kind\">Type</a> → <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Kind.html#t:Type\" title=\"Data.Kind\">Type</a>) h = <a href=\"#v:HasFS\">HasFS</a> {<ul class=\"subs\"><li><a href=\"#v:dumpState\">dumpState</a> ∷ m <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-String.html#t:String\" title=\"Data.String\">String</a></li><li><a href=\"#v:hOpen\">hOpen</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:FsPath\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">FsPath</a> → <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:OpenMode\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">OpenMode</a> → m (<a href=\"Ouroboros-Consensus-Storage-FS-API.html#t:Handle\" title=\"Ouroboros.Consensus.Storage.FS.API\">Handle</a> h)</li><li><a href=\"#v:hClose\">hClose</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API.html#t:Handle\" title=\"Ouroboros.Consensus.Storage.FS.API\">Handle</a> h → m ()</li><li><a href=\"#v:hIsOpen\">hIsOpen</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API.html#t:Handle\" title=\"Ouroboros.Consensus.Storage.FS.API\">Handle</a> h → m <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Bool.html#t:Bool\" title=\"Data.Bool\">Bool</a></li><li><a href=\"#v:hSeek\">hSeek</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API.html#t:Handle\" title=\"Ouroboros.Consensus.Storage.FS.API\">Handle</a> h → <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:SeekMode\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">SeekMode</a> → <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Int.html#t:Int64\" title=\"Data.Int\">Int64</a> → m ()</li><li><a href=\"#v:hGetSome\">hGetSome</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API.html#t:Handle\" title=\"Ouroboros.Consensus.Storage.FS.API\">Handle</a> h → <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Word.html#t:Word64\" title=\"Data.Word\">Word64</a> → m <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/Data-ByteString.html#t:ByteString\" title=\"Data.ByteString\">ByteString</a></li><li><a href=\"#v:hGetSomeAt\">hGetSomeAt</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API.html#t:Handle\" title=\"Ouroboros.Consensus.Storage.FS.API\">Handle</a> h → <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Word.html#t:Word64\" title=\"Data.Word\">Word64</a> → <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:AbsOffset\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">AbsOffset</a> → m <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/Data-ByteString.html#t:ByteString\" title=\"Data.ByteString\">ByteString</a></li><li><a href=\"#v:hPutSome\">hPutSome</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API.html#t:Handle\" title=\"Ouroboros.Consensus.Storage.FS.API\">Handle</a> h → <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/Data-ByteString.html#t:ByteString\" title=\"Data.ByteString\">ByteString</a> → m <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Word.html#t:Word64\" title=\"Data.Word\">Word64</a></li><li><a href=\"#v:hTruncate\">hTruncate</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API.html#t:Handle\" title=\"Ouroboros.Consensus.Storage.FS.API\">Handle</a> h → <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Word.html#t:Word64\" title=\"Data.Word\">Word64</a> → m ()</li><li><a href=\"#v:hGetSize\">hGetSize</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API.html#t:Handle\" title=\"Ouroboros.Consensus.Storage.FS.API\">Handle</a> h → m <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Word.html#t:Word64\" title=\"Data.Word\">Word64</a></li><li><a href=\"#v:createDirectory\">createDirectory</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:FsPath\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">FsPath</a> → m ()</li><li><a href=\"#v:createDirectoryIfMissing\">createDirectoryIfMissing</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Bool.html#t:Bool\" title=\"Data.Bool\">Bool</a> → <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:FsPath\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">FsPath</a> → m ()</li><li><a href=\"#v:listDirectory\">listDirectory</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:FsPath\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">FsPath</a> → m (<a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/containers-0.6.5.1/Data-Set.html#t:Set\" title=\"Data.Set\">Set</a> <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-String.html#t:String\" title=\"Data.String\">String</a>)</li><li><a href=\"#v:doesDirectoryExist\">doesDirectoryExist</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:FsPath\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">FsPath</a> → m <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Bool.html#t:Bool\" title=\"Data.Bool\">Bool</a></li><li><a href=\"#v:doesFileExist\">doesFileExist</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:FsPath\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">FsPath</a> → m <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Bool.html#t:Bool\" title=\"Data.Bool\">Bool</a></li><li><a href=\"#v:removeFile\">removeFile</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:FsPath\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">FsPath</a> → m ()</li><li><a href=\"#v:renameFile\">renameFile</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:FsPath\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">FsPath</a> → <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:FsPath\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">FsPath</a> → m ()</li><li><a href=\"#v:mkFsErrorPath\">mkFsErrorPath</a> ∷ <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:FsPath\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">FsPath</a> → <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:FsErrorPath\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">FsErrorPath</a></li></ul>}",
"name": "HasFS HasFS hSeek hClose hIsOpen hGetSome removeFile createDirectory createDirectoryIfMissing renameFile listDirectory doesDirectoryExist doesFileExist dumpState hGetSize hGetSomeAt hOpen hPutSome hTruncate mkFsErrorPath",
"display_html": "<span class=\"keyword\">data</span> <a href=\"#t:HasFS\">HasFS</a> (m ∷ <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Kind.html#t:Type\" title=\"Data.Kind\">Type</a> → <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Kind.html#t:Type\" title=\"Data.Kind\">Type</a>) h = <a href=\"#v:HasFS\">HasFS</a> {<ul class=\"subs\"><li><a href=\"#v:dumpState\">dumpState</a> ∷ m <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-String.html#t:String\" title=\"Data.String\">String</a></li><li><a href=\"#v:hOpen\">hOpen</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:FsPath\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">FsPath</a> → <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:OpenMode\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">OpenMode</a> → m (<a href=\"Ouroboros-Consensus-Storage-FS-API.html#t:Handle\" title=\"Ouroboros.Consensus.Storage.FS.API\">Handle</a> h)</li><li><a href=\"#v:hClose\">hClose</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API.html#t:Handle\" title=\"Ouroboros.Consensus.Storage.FS.API\">Handle</a> h → m ()</li><li><a href=\"#v:hIsOpen\">hIsOpen</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API.html#t:Handle\" title=\"Ouroboros.Consensus.Storage.FS.API\">Handle</a> h → m <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Bool.html#t:Bool\" title=\"Data.Bool\">Bool</a></li><li><a href=\"#v:hSeek\">hSeek</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API.html#t:Handle\" title=\"Ouroboros.Consensus.Storage.FS.API\">Handle</a> h → <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:SeekMode\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">SeekMode</a> → <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Int.html#t:Int64\" title=\"Data.Int\">Int64</a> → m ()</li><li><a href=\"#v:hGetSome\">hGetSome</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API.html#t:Handle\" title=\"Ouroboros.Consensus.Storage.FS.API\">Handle</a> h → <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Word.html#t:Word64\" title=\"Data.Word\">Word64</a> → m <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/Data-ByteString.html#t:ByteString\" title=\"Data.ByteString\">ByteString</a></li><li><a href=\"#v:hGetSomeAt\">hGetSomeAt</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API.html#t:Handle\" title=\"Ouroboros.Consensus.Storage.FS.API\">Handle</a> h → <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Word.html#t:Word64\" title=\"Data.Word\">Word64</a> → <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:AbsOffset\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">AbsOffset</a> → m <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/Data-ByteString.html#t:ByteString\" title=\"Data.ByteString\">ByteString</a></li><li><a href=\"#v:hPutSome\">hPutSome</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API.html#t:Handle\" title=\"Ouroboros.Consensus.Storage.FS.API\">Handle</a> h → <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/Data-ByteString.html#t:ByteString\" title=\"Data.ByteString\">ByteString</a> → m <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Word.html#t:Word64\" title=\"Data.Word\">Word64</a></li><li><a href=\"#v:hTruncate\">hTruncate</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API.html#t:Handle\" title=\"Ouroboros.Consensus.Storage.FS.API\">Handle</a> h → <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Word.html#t:Word64\" title=\"Data.Word\">Word64</a> → m ()</li><li><a href=\"#v:hGetSize\">hGetSize</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API.html#t:Handle\" title=\"Ouroboros.Consensus.Storage.FS.API\">Handle</a> h → m <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Word.html#t:Word64\" title=\"Data.Word\">Word64</a></li><li><a href=\"#v:createDirectory\">createDirectory</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:FsPath\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">FsPath</a> → m ()</li><li><a href=\"#v:createDirectoryIfMissing\">createDirectoryIfMissing</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Bool.html#t:Bool\" title=\"Data.Bool\">Bool</a> → <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:FsPath\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">FsPath</a> → m ()</li><li><a href=\"#v:listDirectory\">listDirectory</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:FsPath\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">FsPath</a> → m (<a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/containers-0.6.5.1/Data-Set.html#t:Set\" title=\"Data.Set\">Set</a> <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-String.html#t:String\" title=\"Data.String\">String</a>)</li><li><a href=\"#v:doesDirectoryExist\">doesDirectoryExist</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:FsPath\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">FsPath</a> → m <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Bool.html#t:Bool\" title=\"Data.Bool\">Bool</a></li><li><a href=\"#v:doesFileExist\">doesFileExist</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:FsPath\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">FsPath</a> → m <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Bool.html#t:Bool\" title=\"Data.Bool\">Bool</a></li><li><a href=\"#v:removeDirectoryRecursive\">removeDirectoryRecursive</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:FsPath\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">FsPath</a> → m ()</li><li><a href=\"#v:removeFile\">removeFile</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:FsPath\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">FsPath</a> → m ()</li><li><a href=\"#v:renameFile\">renameFile</a> ∷ <a href=\"Ouroboros-Consensus-Util-CallStack.html#t:HasCallStack\" title=\"Ouroboros.Consensus.Util.CallStack\">HasCallStack</a> ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:FsPath\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">FsPath</a> → <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:FsPath\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">FsPath</a> → m ()</li><li><a href=\"#v:mkFsErrorPath\">mkFsErrorPath</a> ∷ <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:FsPath\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">FsPath</a> → <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:FsErrorPath\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">FsErrorPath</a></li><li><a href=\"#v:unsafeToFilePath\">unsafeToFilePath</a> ∷ <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:FsPath\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">FsPath</a> → m <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/System-IO.html#t:FilePath\" title=\"System.IO\">FilePath</a></li></ul>}",
"name": "HasFS HasFS hSeek hClose hIsOpen hGetSome removeFile createDirectory createDirectoryIfMissing removeDirectoryRecursive renameFile listDirectory doesDirectoryExist doesFileExist dumpState hGetSize hGetSomeAt hOpen hPutSome hTruncate mkFsErrorPath unsafeToFilePath",
"module": "Ouroboros.Consensus.Storage.FS.API",
"link": "ouroboros-consensus/Ouroboros-Consensus-Storage-FS-API.html#t:HasFS"
},
"link": "ouroboros-consensus/Ouroboros-Consensus-Storage-FS-IO.html#t:HandleIO"
},
{
"display_html": "<a href=\"#v:ioHasFS\">ioHasFS</a> ∷ <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:MountPoint\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">MountPoint</a> → <a href=\"Ouroboros-Consensus-Storage-FS-API.html#t:HasFS\" title=\"Ouroboros.Consensus.Storage.FS.API\">HasFS</a> <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/System-IO.html#t:IO\" title=\"System.IO\">IO</a> <a href=\"Ouroboros-Consensus-Storage-FS-IO.html#t:HandleIO\" title=\"Ouroboros.Consensus.Storage.FS.IO\">HandleIO</a>",
"display_html": "<a href=\"#v:ioHasFS\">ioHasFS</a> ∷ ∀ (m ∷ <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Kind.html#t:Type\" title=\"Data.Kind\">Type</a> → <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Data-Kind.html#t:Type\" title=\"Data.Kind\">Type</a>). <a href=\"file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/Control-Monad-IO-Class.html#t:MonadIO\" title=\"Control.Monad.IO.Class\">MonadIO</a> m ⇒ <a href=\"Ouroboros-Consensus-Storage-FS-API-Types.html#t:MountPoint\" title=\"Ouroboros.Consensus.Storage.FS.API.Types\">MountPoint</a> → <a href=\"Ouroboros-Consensus-Storage-FS-API.html#t:HasFS\" title=\"Ouroboros.Consensus.Storage.FS.API\">HasFS</a> m <a href=\"Ouroboros-Consensus-Storage-FS-IO.html#t:HandleIO\" title=\"Ouroboros.Consensus.Storage.FS.IO\">HandleIO</a>",
"name": "ioHasFS",
"module": "Ouroboros.Consensus.Storage.FS.IO",
"link": "ouroboros-consensus/Ouroboros-Consensus-Storage-FS-IO.html#v:ioHasFS"
</span><span id="line-31"></span><span class="hs-comment">-- | JobPool allows to submit asynchronous jobs, wait for their completion or</span><span>
</span><span id="line-32"></span><span class="hs-comment">-- cancel. Jobs are grouped, each group can be cancelled separately.</span><span>
</span><span id="line-33"></span><span class="hs-comment">--</span><span>
</span><span id="line-34"></span><span class="hs-keyword">data</span><span> </span><span id="JobPool"><span class="annot"><a href="Control.Concurrent.JobPool.html#JobPool"><span class="hs-identifier hs-var">JobPool</span></a></span></span><span> </span><span id="local-6989586621679112208"><span class="annot"><a href="#local-6989586621679112208"><span class="hs-identifier hs-type">group</span></a></span></span><span> </span><span id="local-6989586621679112209"><span class="annot"><a href="#local-6989586621679112209"><span class="hs-identifier hs-type">m</span></a></span></span><span> </span><span id="local-6989586621679112207"><span class="annot"><a href="#local-6989586621679112207"><span class="hs-identifier hs-type">a</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="JobPool"><span class="annot"><a href="Control.Concurrent.JobPool.html#JobPool"><span class="hs-identifier hs-var">JobPool</span></a></span></span><span> </span><span class="hs-special">{</span><span>
</span><span id="line-34"></span><span class="hs-keyword">data</span><span> </span><span id="JobPool"><span class="annot"><a href="Control.Concurrent.JobPool.html#JobPool"><span class="hs-identifier hs-var">JobPool</span></a></span></span><span> </span><span id="local-6989586621679112351"><span class="annot"><a href="#local-6989586621679112351"><span class="hs-identifier hs-type">group</span></a></span></span><span> </span><span id="local-6989586621679112352"><span class="annot"><a href="#local-6989586621679112352"><span class="hs-identifier hs-type">m</span></a></span></span><span> </span><span id="local-6989586621679112350"><span class="annot"><a href="#local-6989586621679112350"><span class="hs-identifier hs-type">a</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="JobPool"><span class="annot"><a href="Control.Concurrent.JobPool.html#JobPool"><span class="hs-identifier hs-var">JobPool</span></a></span></span><span> </span><span class="hs-special">{</span><span>
</span><span id="line-35"></span><span> </span><span id="jobsVar"><span class="annot"><span class="annottext">JobPool group m a -> TVar m (Map (group, ThreadId m) (Async m ()))
</span><a href="Control.Concurrent.JobPool.html#jobsVar"><span class="hs-identifier hs-var hs-var">jobsVar</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-glyph">!</span><span class="hs-special">(</span><span class="annot"><span class="hs-identifier hs-type">TVar</span></span><span> </span><span class="annot"><a href="#local-6989586621679112209"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/containers-0.6.5.1/src"><span class="hs-identifier hs-type">Map</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="#local-6989586621679112208"><span class="hs-identifier hs-type">group</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">ThreadId</span></span><span> </span><span class="annot"><a href="#local-6989586621679112209"><span class="hs-identifier hs-type">m</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="hs-identifier hs-type">Async</span></span><span> </span><span class="annot"><a href="#local-6989586621679112209"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
</span><a href="Control.Concurrent.JobPool.html#jobsVar"><span class="hs-identifier hs-var hs-var">jobsVar</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-glyph">!</span><span class="hs-special">(</span><span class="annot"><span class="hs-identifier hs-type">TVar</span></span><span> </span><span class="annot"><a href="#local-6989586621679112352"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/containers-0.6.5.1/src"><span class="hs-identifier hs-type">Map</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="#local-6989586621679112351"><span class="hs-identifier hs-type">group</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">ThreadId</span></span><span> </span><span class="annot"><a href="#local-6989586621679112352"><span class="hs-identifier hs-type">m</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="hs-identifier hs-type">Async</span></span><span> </span><span class="annot"><a href="#local-6989586621679112352"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
</span><span id="line-36"></span><span> </span><span id="completionQueue"><span class="annot"><span class="annottext">JobPool group m a -> TQueue m a
</span><a href="Control.Concurrent.JobPool.html#completionQueue"><span class="hs-identifier hs-var hs-var">completionQueue</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-glyph">!</span><span class="hs-special">(</span><span class="annot"><span class="hs-identifier hs-type">TQueue</span></span><span> </span><span class="annot"><a href="#local-6989586621679112209"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112207"><span class="hs-identifier hs-type">a</span></a></span><span class="hs-special">)</span><span>
</span><a href="Control.Concurrent.JobPool.html#completionQueue"><span class="hs-identifier hs-var hs-var">completionQueue</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-glyph">!</span><span class="hs-special">(</span><span class="annot"><span class="hs-identifier hs-type">TQueue</span></span><span> </span><span class="annot"><a href="#local-6989586621679112352"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112350"><span class="hs-identifier hs-type">a</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-37"></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-38"></span><span>
</span><span id="line-39"></span><span class="hs-comment">-- | An asynchronous job which belongs to some group and its exception handler.</span><span>
</span><span id="line-40"></span><span class="hs-comment">--</span><span>
</span><span id="line-41"></span><span class="hs-keyword">data</span><span> </span><span id="Job"><span class="annot"><a href="Control.Concurrent.JobPool.html#Job"><span class="hs-identifier hs-var">Job</span></a></span></span><span> </span><span id="local-6989586621679112107"><span class="annot"><a href="#local-6989586621679112107"><span class="hs-identifier hs-type">group</span></a></span></span><span> </span><span id="local-6989586621679112106"><span class="annot"><a href="#local-6989586621679112106"><span class="hs-identifier hs-type">m</span></a></span></span><span> </span><span id="local-6989586621679112105"><span class="annot"><a href="#local-6989586621679112105"><span class="hs-identifier hs-type">a</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-42"></span><span> </span><span id="Job"><span class="annot"><a href="Control.Concurrent.JobPool.html#Job"><span class="hs-identifier hs-var">Job</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="#local-6989586621679112106"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112105"><span class="hs-identifier hs-type">a</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-comment">-- ^ job</span><span>
</span><span id="line-43"></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">SomeException</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679112106"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112105"><span class="hs-identifier hs-type">a</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-comment">-- ^ error handler</span><span>
</span><span id="line-44"></span><span> </span><span class="annot"><a href="#local-6989586621679112107"><span class="hs-identifier hs-type">group</span></a></span><span> </span><span class="hs-comment">-- ^ job group</span><span>
</span><span id="line-41"></span><span class="hs-keyword">data</span><span> </span><span id="Job"><span class="annot"><a href="Control.Concurrent.JobPool.html#Job"><span class="hs-identifier hs-var">Job</span></a></span></span><span> </span><span id="local-6989586621679112250"><span class="annot"><a href="#local-6989586621679112250"><span class="hs-identifier hs-type">group</span></a></span></span><span> </span><span id="local-6989586621679112249"><span class="annot"><a href="#local-6989586621679112249"><span class="hs-identifier hs-type">m</span></a></span></span><span> </span><span id="local-6989586621679112248"><span class="annot"><a href="#local-6989586621679112248"><span class="hs-identifier hs-type">a</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-42"></span><span> </span><span id="Job"><span class="annot"><a href="Control.Concurrent.JobPool.html#Job"><span class="hs-identifier hs-var">Job</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="#local-6989586621679112249"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112248"><span class="hs-identifier hs-type">a</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-comment">-- ^ job</span><span>
</span><span id="line-43"></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">SomeException</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679112249"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112248"><span class="hs-identifier hs-type">a</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-comment">-- ^ error handler</span><span>
</span><span id="line-44"></span><span> </span><span class="annot"><a href="#local-6989586621679112250"><span class="hs-identifier hs-type">group</span></a></span><span> </span><span class="hs-comment">-- ^ job group</span><span>
</span><span id="line-45"></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">String</span></a></span><span> </span><span class="hs-comment">-- ^ thread label</span><span>
</span><span id="line-46"></span><span>
</span><span id="line-47"></span><span class="annot"><a href="Control.Concurrent.JobPool.html#withJobPool"><span class="hs-identifier hs-type">withJobPool</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-keyword">forall</span><span> </span><span id="local-6989586621679112103"><span class="annot"><a href="#local-6989586621679112103"><span class="hs-identifier hs-type">group</span></a></span></span><span> </span><span id="local-6989586621679112102"><span class="annot"><a href="#local-6989586621679112102"><span class="hs-identifier hs-type">m</span></a></span></span><span> </span><span id="local-6989586621679112101"><span class="annot"><a href="#local-6989586621679112101"><span class="hs-identifier hs-type">a</span></a></span></span><span> </span><span id="local-6989586621679112100"><span class="annot"><a href="#local-6989586621679112100"><span class="hs-identifier hs-type">b</span></a></span></span><span class="hs-operator">.</span><span>
</span><span id="line-48"></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="hs-identifier hs-type">MonadAsync</span></span><span> </span><span class="annot"><a href="#local-6989586621679112102"><span class="hs-identifier hs-type">m</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadThrow</span></span><span> </span><span class="annot"><a href="#local-6989586621679112102"><span class="hs-identifier hs-type">m</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadLabelledSTM</span></span><span> </span><span class="annot"><a href="#local-6989586621679112102"><span class="hs-identifier hs-type">m</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-49"></span><span> </span><span class="hs-glyph">=></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Control.Concurrent.JobPool.html#JobPool"><span class="hs-identifier hs-type">JobPool</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112103"><span class="hs-identifier hs-type">group</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112102"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112101"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679112102"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112100"><span class="hs-identifier hs-type">b</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679112102"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112100"><span class="hs-identifier hs-type">b</span></a></span><span>
</span><span id="line-47"></span><span class="annot"><a href="Control.Concurrent.JobPool.html#withJobPool"><span class="hs-identifier hs-type">withJobPool</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-keyword">forall</span><span> </span><span id="local-6989586621679112246"><span class="annot"><a href="#local-6989586621679112246"><span class="hs-identifier hs-type">group</span></a></span></span><span> </span><span id="local-6989586621679112245"><span class="annot"><a href="#local-6989586621679112245"><span class="hs-identifier hs-type">m</span></a></span></span><span> </span><span id="local-6989586621679112244"><span class="annot"><a href="#local-6989586621679112244"><span class="hs-identifier hs-type">a</span></a></span></span><span> </span><span id="local-6989586621679112243"><span class="annot"><a href="#local-6989586621679112243"><span class="hs-identifier hs-type">b</span></a></span></span><span class="hs-operator">.</span><span>
</span><span id="line-48"></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="hs-identifier hs-type">MonadAsync</span></span><span> </span><span class="annot"><a href="#local-6989586621679112245"><span class="hs-identifier hs-type">m</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadThrow</span></span><span> </span><span class="annot"><a href="#local-6989586621679112245"><span class="hs-identifier hs-type">m</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadLabelledSTM</span></span><span> </span><span class="annot"><a href="#local-6989586621679112245"><span class="hs-identifier hs-type">m</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-49"></span><span> </span><span class="hs-glyph">=></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Control.Concurrent.JobPool.html#JobPool"><span class="hs-identifier hs-type">JobPool</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112246"><span class="hs-identifier hs-type">group</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112245"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112244"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679112245"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112243"><span class="hs-identifier hs-type">b</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679112245"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112243"><span class="hs-identifier hs-type">b</span></a></span><span>
</span><span id="line-50"></span><span id="withJobPool"><span class="annot"><span class="annottext">withJobPool :: (JobPool group m a -> m b) -> m b
</span><a href="Control.Concurrent.JobPool.html#withJobPool"><span class="hs-identifier hs-var hs-var">withJobPool</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-51"></span><span> </span><span class="annot"><span class="annottext">m (JobPool group m a)
MonadThrow m =>
m a -> (a -> m b) -> (a -> m c) -> m c
</span><span class="hs-identifier hs-var">bracket</span></span><span> </span><span class="annot"><span class="annottext">m (JobPool group m a)
</span><a href="#local-6989586621679112098"><span class="hs-identifier hs-var">create</span></a></span><span> </span><span class="annot"><span class="annottext">JobPool group m a -> m ()
</span><a href="#local-6989586621679112097"><span class="hs-identifier hs-var">close</span></a></span><span>
</span><a href="#local-6989586621679112241"><span class="hs-identifier hs-var">create</span></a></span><span> </span><span class="annot"><span class="annottext">JobPool group m a -> m ()
</span><a href="#local-6989586621679112240"><span class="hs-identifier hs-var">close</span></a></span><span>
</span><span id="line-52"></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-53"></span><span> </span><span class="annot"><a href="#local-6989586621679112098"><span class="hs-identifier hs-type">create</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="#local-6989586621679112102"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Control.Concurrent.JobPool.html#JobPool"><span class="hs-identifier hs-type">JobPool</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112103"><span class="hs-identifier hs-type">group</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112102"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112101"><span class="hs-identifier hs-type">a</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-54"></span><span> </span><span id="local-6989586621679112098"><span class="annot"><span class="annottext">create :: m (JobPool group m a)
</span><a href="#local-6989586621679112098"><span class="hs-identifier hs-var hs-var">create</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-53"></span><span> </span><span class="annot"><a href="#local-6989586621679112241"><span class="hs-identifier hs-type">create</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="#local-6989586621679112245"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Control.Concurrent.JobPool.html#JobPool"><span class="hs-identifier hs-type">JobPool</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112246"><span class="hs-identifier hs-type">group</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112245"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112244"><span class="hs-identifier hs-type">a</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-54"></span><span> </span><span id="local-6989586621679112241"><span class="annot"><span class="annottext">create :: m (JobPool group m a)
</span><a href="#local-6989586621679112241"><span class="hs-identifier hs-var hs-var">create</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-55"></span><span> </span><span class="annot"><span class="annottext">STM m (JobPool group m a) -> m (JobPool group m a)
forall (m :: * -> *) a.
(MonadSTM m, HasCallStack) =>
-> STM m (TVar m (Map (group, ThreadId m) (Async m ()))))
-> STM m (TVar m (Map (group, ThreadId m) (Async m ())))
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">>>=</span></a></span><span> </span><span class="hs-glyph">\</span><span id="local-6989586621679112092"><span class="annot"><span class="annottext">TVar m (Map (group, ThreadId m) (Async m ()))
</span><a href="#local-6989586621679112092"><span class="hs-identifier hs-var">v</span></a></span></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="annottext">TVar m (Map (group, ThreadId m) (Async m ())) -> String -> STM m ()
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">>>=</span></a></span><span> </span><span class="hs-glyph">\</span><span id="local-6989586621679112235"><span class="annot"><span class="annottext">TVar m (Map (group, ThreadId m) (Async m ()))
</span><a href="#local-6989586621679112235"><span class="hs-identifier hs-var">v</span></a></span></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="annottext">TVar m (Map (group, ThreadId m) (Async m ())) -> String -> STM m ()
forall (m :: * -> *) a.
MonadLabelledSTM m =>
TVar m a -> String -> STM m ()
</span><span class="hs-identifier hs-var">labelTVar</span></span><span> </span><span class="annot"><span class="annottext">TVar m (Map (group, ThreadId m) (Async m ()))
</span><a href="#local-6989586621679112092"><span class="hs-identifier hs-var">v</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621679112235"><span class="hs-identifier hs-var">v</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">"job-pool"</span></span><span> </span><span class="annot"><span class="annottext">STM m ()
-> TVar m (Map (group, ThreadId m) (Async m ()))
-> STM m (TVar m (Map (group, ThreadId m) (Async m ())))
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">$></span></a></span><span> </span><span class="annot"><span class="annottext">TVar m (Map (group, ThreadId m) (Async m ()))
</span><a href="#local-6989586621679112092"><span class="hs-identifier hs-var">v</span></a></span><span class="hs-special">)</span><span>
</span><a href="#local-6989586621679112235"><span class="hs-identifier hs-var">v</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-57"></span><span> </span><span class="annot"><span class="annottext">STM m (TQueue m a -> JobPool group m a)
-> STM m (TQueue m a) -> STM m (JobPool group m a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
</span><span id="line-63"></span><span> </span><span class="hs-comment">-- delivered, e.g. deadlock in an ffi call or a tight loop which does not</span><span>
</span><span id="line-64"></span><span> </span><span class="hs-comment">-- allocate (which is not a deadlock per se, but rather a rare unfortunate</span><span>
</span><span id="line-65"></span><span> </span><span class="hs-comment">-- condition).</span><span>
</span><span id="line-66"></span><span> </span><span class="annot"><a href="#local-6989586621679112097"><span class="hs-identifier hs-type">close</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="Control.Concurrent.JobPool.html#JobPool"><span class="hs-identifier hs-type">JobPool</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112103"><span class="hs-identifier hs-type">group</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112102"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112101"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679112102"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
</span><span id="line-67"></span><span> </span><span id="local-6989586621679112097"><span class="annot"><span class="annottext">close :: JobPool group m a -> m ()
</span><a href="#local-6989586621679112097"><span class="hs-identifier hs-var hs-var">close</span></a></span></span><span> </span><span class="annot"><a href="Control.Concurrent.JobPool.html#JobPool"><span class="hs-identifier hs-type">JobPool</span></a></span><span class="hs-special">{</span><span id="local-6989586621679112089"><span class="annot"><span class="annottext">TVar m (Map (group, ThreadId m) (Async m ()))
</span><span id="line-66"></span><span> </span><span class="annot"><a href="#local-6989586621679112240"><span class="hs-identifier hs-type">close</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="Control.Concurrent.JobPool.html#JobPool"><span class="hs-identifier hs-type">JobPool</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112246"><span class="hs-identifier hs-type">group</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112245"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112244"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679112245"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
</span><span id="line-67"></span><span> </span><span id="local-6989586621679112240"><span class="annot"><span class="annottext">close :: JobPool group m a -> m ()
</span><a href="#local-6989586621679112240"><span class="hs-identifier hs-var hs-var">close</span></a></span></span><span> </span><span class="annot"><a href="Control.Concurrent.JobPool.html#JobPool"><span class="hs-identifier hs-type">JobPool</span></a></span><span class="hs-special">{</span><span id="local-6989586621679112232"><span class="annot"><span class="annottext">TVar m (Map (group, ThreadId m) (Async m ()))
jobsVar :: TVar m (Map (group, ThreadId m) (Async m ()))
jobsVar :: forall group (m :: * -> *) a.
JobPool group m a -> TVar m (Map (group, ThreadId m) (Async m ()))
</span><a href="#local-6989586621679112089"><span class="hs-identifier hs-var hs-var">jobsVar</span></a></span></span><span class="hs-special">}</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-68"></span><span> </span><span id="local-6989586621679112088"><span class="annot"><span class="annottext">Map (group, ThreadId m) (Async m ())
</span><a href="#local-6989586621679112088"><span class="hs-identifier hs-var">jobs</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">TVar m (Map (group, ThreadId m) (Async m ()))
</span><a href="#local-6989586621679112232"><span class="hs-identifier hs-var hs-var">jobsVar</span></a></span></span><span class="hs-special">}</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-68"></span><span> </span><span id="local-6989586621679112231"><span class="annot"><span class="annottext">Map (group, ThreadId m) (Async m ())
</span><a href="#local-6989586621679112231"><span class="hs-identifier hs-var">jobs</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">TVar m (Map (group, ThreadId m) (Async m ()))
-> m (Map (group, ThreadId m) (Async m ()))
forall (m :: * -> *) a. MonadSTM m => TVar m a -> m a
</span><span class="hs-identifier hs-var">readTVarIO</span></span><span> </span><span class="annot"><span class="annottext">TVar m (Map (group, ThreadId m) (Async m ()))
</span><a href="#local-6989586621679112089"><span class="hs-identifier hs-var">jobsVar</span></a></span><span>
</span><a href="#local-6989586621679112232"><span class="hs-identifier hs-var">jobsVar</span></a></span><span>
</span><span id="line-69"></span><span> </span><span class="annot"><span class="annottext">(Async m () -> m ())
-> Map (group, ThreadId m) (Async m ()) -> m ()
forall (t :: * -> *) (m :: * -> *) a b.
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-var">mapM_</span></a></span><span> </span><span class="annot"><span class="annottext">Async m () -> m ()
forall (m :: * -> *) a. MonadAsync m => Async m a -> m ()
</span><span class="hs-identifier hs-var">uninterruptibleCancel</span></span><span> </span><span class="annot"><span class="annottext">Map (group, ThreadId m) (Async m ())
</span><a href="#local-6989586621679112088"><span class="hs-identifier hs-var">jobs</span></a></span><span>
</span><a href="#local-6989586621679112231"><span class="hs-identifier hs-var">jobs</span></a></span><span>
</span><span id="line-70"></span><span>
</span><span id="line-71"></span><span class="annot"><a href="Control.Concurrent.JobPool.html#forkJob"><span class="hs-identifier hs-type">forkJob</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-keyword">forall</span><span> </span><span id="local-6989586621679112084"><span class="annot"><a href="#local-6989586621679112084"><span class="hs-identifier hs-type">group</span></a></span></span><span> </span><span id="local-6989586621679112083"><span class="annot"><a href="#local-6989586621679112083"><span class="hs-identifier hs-type">m</span></a></span></span><span> </span><span id="local-6989586621679112082"><span class="annot"><a href="#local-6989586621679112082"><span class="hs-identifier hs-type">a</span></a></span></span><span class="hs-operator">.</span><span>
</span><span id="line-72"></span><span> </span><span class="hs-special">(</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadAsync</span></span><span> </span><span class="annot"><a href="#local-6989586621679112083"><span class="hs-identifier hs-type">m</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadMask</span></span><span> </span><span class="annot"><a href="#local-6989586621679112083"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-73"></span><span> </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/ghc-prim-0.6.1/src"><span class="hs-identifier hs-type">Ord</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112084"><span class="hs-identifier hs-type">group</span></a></span><span>
</span><span id="line-71"></span><span class="annot"><a href="Control.Concurrent.JobPool.html#forkJob"><span class="hs-identifier hs-type">forkJob</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-keyword">forall</span><span> </span><span id="local-6989586621679112227"><span class="annot"><a href="#local-6989586621679112227"><span class="hs-identifier hs-type">group</span></a></span></span><span> </span><span id="local-6989586621679112226"><span class="annot"><a href="#local-6989586621679112226"><span class="hs-identifier hs-type">m</span></a></span></span><span> </span><span id="local-6989586621679112225"><span class="annot"><a href="#local-6989586621679112225"><span class="hs-identifier hs-type">a</span></a></span></span><span class="hs-operator">.</span><span>
</span><span id="line-72"></span><span> </span><span class="hs-special">(</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadAsync</span></span><span> </span><span class="annot"><a href="#local-6989586621679112226"><span class="hs-identifier hs-type">m</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadMask</span></span><span> </span><span class="annot"><a href="#local-6989586621679112226"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-73"></span><span> </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/ghc-prim-0.6.1/src"><span class="hs-identifier hs-type">Ord</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112227"><span class="hs-identifier hs-type">group</span></a></span><span>
</span><span id="line-74"></span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-75"></span><span> </span><span class="hs-glyph">=></span><span> </span><span class="annot"><a href="Control.Concurrent.JobPool.html#JobPool"><span class="hs-identifier hs-type">JobPool</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112084"><span class="hs-identifier hs-type">group</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112083"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112082"><span class="hs-identifier hs-type">a</span></a></span><span>
</span><span id="line-76"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Control.Concurrent.JobPool.html#Job"><span class="hs-identifier hs-type">Job</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112084"><span class="hs-identifier hs-type">group</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112083"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112082"><span class="hs-identifier hs-type">a</span></a></span><span>
</span><span id="line-77"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679112083"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
</span><span id="line-75"></span><span> </span><span class="hs-glyph">=></span><span> </span><span class="annot"><a href="Control.Concurrent.JobPool.html#JobPool"><span class="hs-identifier hs-type">JobPool</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112227"><span class="hs-identifier hs-type">group</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112226"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112225"><span class="hs-identifier hs-type">a</span></a></span><span>
</span><span id="line-76"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Control.Concurrent.JobPool.html#Job"><span class="hs-identifier hs-type">Job</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112227"><span class="hs-identifier hs-type">group</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112226"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679112225"><span class="hs-identifier hs-type">a</span></a></span><span>
</span><span id="line-77"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679112226"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
</span><span id="line-78"></span><span id="forkJob"><span class="annot"><span class="annottext">forkJob :: JobPool group m a -> Job group m a -> m ()
</span><a href="Control.Concurrent.JobPool.html#forkJob"><span class="hs-identifier hs-var hs-var">forkJob</span></a></span></span><span> </span><span class="annot"><a href="Control.Concurrent.JobPool.html#JobPool"><span class="hs-identifier hs-type">JobPool</span></a></span><span class="hs-special">{</span><span id="local-6989586621679112081"><span class="annot"><span class="annottext">TVar m (Map (group, ThreadId m) (Async m ()))
</span><a href="Control.Concurrent.JobPool.html#forkJob"><span class="hs-identifier hs-var hs-var">forkJob</span></a></span></span><span> </span><span class="annot"><a href="Control.Concurrent.JobPool.html#JobPool"><span class="hs-identifier hs-type">JobPool</span></a></span><span class="hs-special">{</span><span id="local-6989586621679112224"><span class="annot"><span class="annottext">TVar m (Map (group, ThreadId m) (Async m ()))
jobsVar :: TVar m (Map (group, ThreadId m) (Async m ()))
jobsVar :: forall group (m :: * -> *) a.
JobPool group m a -> TVar m (Map (group, ThreadId m) (Async m ()))
</span><a href="#local-6989586621679112081"><span class="hs-identifier hs-var hs-var">jobsVar</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621679112080"><span class="annot"><span class="annottext">TQueue m a
</span><a href="#local-6989586621679112224"><span class="hs-identifier hs-var hs-var">jobsVar</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621679112223"><span class="annot"><span class="annottext">TQueue m a
completionQueue :: TQueue m a
completionQueue :: forall group (m :: * -> *) a. JobPool group m a -> TQueue m a
</span><a href="#local-6989586621679112080"><span class="hs-identifier hs-var hs-var">completionQueue</span></a></span></span><span class="hs-special">}</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Control.Concurrent.JobPool.html#Job"><span class="hs-identifier hs-type">Job</span></a></span><span> </span><span id="local-6989586621679112079"><span class="annot"><span class="annottext">m a
</span><a href="#local-6989586621679112079"><span class="hs-identifier hs-var">action</span></a></span></span><span> </span><span id="local-6989586621679112078"><span class="annot"><span class="annottext">SomeException -> m a
</span><a href="#local-6989586621679112078"><span class="hs-identifier hs-var">handler</span></a></span></span><span> </span><span id="local-6989586621679112077"><span class="annot"><span class="annottext">group
</span><a href="#local-6989586621679112077"><span class="hs-identifier hs-var">group</span></a></span></span><span> </span><span id="local-6989586621679112076"><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621679112076"><span class="hs-keyword hs-var">label</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span>
</span><a href="#local-6989586621679112223"><span class="hs-identifier hs-var hs-var">completionQueue</span></a></span></span><span class="hs-special">}</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Control.Concurrent.JobPool.html#Job"><span class="hs-identifier hs-type">Job</span></a></span><span> </span><span id="local-6989586621679112222"><span class="annot"><span class="annottext">m a
</span><a href="#local-6989586621679112222"><span class="hs-identifier hs-var">action</span></a></span></span><span> </span><span id="local-6989586621679112221"><span class="annot"><span class="annottext">SomeException -> m a
</span><a href="#local-6989586621679112221"><span class="hs-identifier hs-var">handler</span></a></span></span><span> </span><span id="local-6989586621679112220"><span class="annot"><span class="annottext">group
</span><a href="#local-6989586621679112220"><span class="hs-identifier hs-var">group</span></a></span></span><span> </span><span id="local-6989586621679112219"><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621679112219"><span class="hs-keyword hs-var">label</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-79"></span><span> </span><span class="annot"><span class="annottext">((forall a. m a -> m a) -> m ()) -> m ()
forall (m :: * -> *) b.
MonadMask m =>
((forall a. m a -> m a) -> m b) -> m b
</span><span class="hs-identifier hs-var">mask</span></span><span> </span><span class="annot"><span class="annottext">(((forall a. m a -> m a) -> m ()) -> m ())
-> ((forall a. m a -> m a) -> m ()) -> m ()
forall a b. (a -> b) -> a -> b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="hs-glyph">\</span><span id="local-6989586621679112074"><span class="annot"><span class="annottext">forall a. m a -> m a
</span><a href="#local-6989586621679112074"><span class="hs-identifier hs-var">restore</span></a></span></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-80"></span><span> </span><span id="local-6989586621679112073"><span class="annot"><span class="annottext">Async m ()
</span><a href="#local-6989586621679112073"><span class="hs-identifier hs-var">jobAsync</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">m () -> m (Async m ())
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="hs-glyph">\</span><span id="local-6989586621679112217"><span class="annot"><span class="annottext">forall a. m a -> m a
</span><a href="#local-6989586621679112217"><span class="hs-identifier hs-var">restore</span></a></span></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-80"></span><span> </span><span id="local-6989586621679112216"><span class="annot"><span class="annottext">Async m ()
</span><a href="#local-6989586621679112216"><span class="hs-identifier hs-var">jobAsync</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">m () -> m (Async m ())
forall (m :: * -> *) a. MonadAsync m => m a -> m (Async m a)
</span><span class="hs-identifier hs-var">async</span></span><span> </span><span class="annot"><span class="annottext">(m () -> m (Async m ())) -> m () -> m (Async m ())
forall a b. (a -> b) -> a -> b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-81"></span><span> </span><span id="local-6989586621679112071"><span class="annot"><span class="annottext">ThreadId m
</span><a href="#local-6989586621679112071"><span class="hs-identifier hs-var">tid</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">m (ThreadId m)
</span><span id="line-81"></span><span> </span><span id="local-6989586621679112214"><span class="annot"><span class="annottext">ThreadId m
</span><a href="#local-6989586621679112214"><span class="hs-identifier hs-var">tid</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">m (ThreadId m)
forall (m :: * -> *). MonadThread m => m (ThreadId m)
</span><span class="hs-identifier hs-var">myThreadId</span></span><span>
</span><span id="line-82"></span><span> </span><span class="annot"><span class="annottext">ThreadId m -> String -> m ()
forall (m :: * -> *). MonadThread m => ThreadId m -> String -> m ()
</span><span class="hs-identifier hs-var">labelThread</span></span><span> </span><span class="annot"><span class="annottext">ThreadId m
</span><a href="#local-6989586621679112071"><span class="hs-identifier hs-var">tid</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621679112076"><span class="hs-keyword hs-var">label</span></a></span><span>
</span><span id="line-83"></span><span> </span><span class="hs-glyph">!</span><span id="local-6989586621679112068"><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621679112068"><span class="hs-identifier hs-var">res</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">(SomeException -> Maybe SomeException)
</span><a href="#local-6989586621679112214"><span class="hs-identifier hs-var">tid</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621679112219"><span class="hs-keyword hs-var">label</span></a></span><span>
</span><span id="line-83"></span><span> </span><span class="hs-glyph">!</span><span id="local-6989586621679112211"><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621679112211"><span class="hs-identifier hs-var">res</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">(SomeException -> Maybe SomeException)
-> (SomeException -> m a) -> m a -> m a
forall (m :: * -> *) e b a.
(MonadCatch m, Exception e) =>
(e -> Maybe b) -> (b -> m a) -> m a -> m a
</span><span class="hs-identifier hs-var">handleJust</span></span><span> </span><span class="annot"><span class="annottext">SomeException -> Maybe SomeException
</span><a href="#local-6989586621679112066"><span class="hs-identifier hs-var">notAsyncExceptions</span></a></span><span> </span><span class="annot"><span class="annottext">SomeException -> m a
</span><a href="#local-6989586621679112078"><span class="hs-identifier hs-var">handler</span></a></span><span> </span><span class="annot"><span class="annottext">(m a -> m a) -> m a -> m a
</span><a href="#local-6989586621679112209"><span class="hs-identifier hs-var">notAsyncExceptions</span></a></span><span> </span><span class="annot"><span class="annottext">SomeException -> m a
</span><a href="#local-6989586621679112221"><span class="hs-identifier hs-var">handler</span></a></span><span> </span><span class="annot"><span class="annottext">(m a -> m a) -> m a -> m a
forall a b. (a -> b) -> a -> b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">$</span></a></span><span>
</span><span id="line-84"></span><span> </span><span class="annot"><span class="annottext">m a -> m a
forall a. m a -> m a
</span><a href="#local-6989586621679112074"><span class="hs-identifier hs-var">restore</span></a></span><span> </span><span class="annot"><span class="annottext">m a
</span><a href="#local-6989586621679112079"><span class="hs-identifier hs-var">action</span></a></span><span>
</span><a href="#local-6989586621679112217"><span class="hs-identifier hs-var">restore</span></a></span><span> </span><span class="annot"><span class="annottext">m a
</span><a href="#local-6989586621679112222"><span class="hs-identifier hs-var">action</span></a></span><span>
</span><span id="line-85"></span><span> </span><span class="annot"><span class="annottext">STM m () -> m ()
forall (m :: * -> *) a.
(MonadSTM m, HasCallStack) =>
</span><span id="line-52"></span><span> </span><span class="hs-comment">-- ^ write handle</span><span>
</span><span id="line-53"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Network.Mux.Bearer.Pipe.html#PipeChannel"><span class="hs-identifier hs-type">PipeChannel</span></a></span><span>
</span><span id="line-54"></span><span id="pipeChannelFromHandles"><span class="annot"><span class="annottext">pipeChannelFromHandles :: Handle -> Handle -> PipeChannel
</span><a href="Network.Mux.Bearer.Pipe.html#pipeChannelFromHandles"><span class="hs-identifier hs-var hs-var">pipeChannelFromHandles</span></a></span></span><span> </span><span id="local-6989586621679114598"><span class="annot"><span class="annottext">Handle
</span><a href="#local-6989586621679114598"><span class="hs-identifier hs-var">r</span></a></span></span><span> </span><span id="local-6989586621679114597"><span class="annot"><span class="annottext">Handle
</span><a href="#local-6989586621679114597"><span class="hs-identifier hs-var">w</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">PipeChannel :: (Int -> IO ByteString) -> (ByteString -> IO ()) -> PipeChannel
</span><a href="Network.Mux.Bearer.Pipe.html#pipeChannelFromHandles"><span class="hs-identifier hs-var hs-var">pipeChannelFromHandles</span></a></span></span><span> </span><span id="local-6989586621679114741"><span class="annot"><span class="annottext">Handle
</span><a href="#local-6989586621679114741"><span class="hs-identifier hs-var">r</span></a></span></span><span> </span><span id="local-6989586621679114740"><span class="annot"><span class="annottext">Handle
</span><a href="#local-6989586621679114740"><span class="hs-identifier hs-var">w</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">PipeChannel :: (Int -> IO ByteString) -> (ByteString -> IO ()) -> PipeChannel
</span><a href="Network.Mux.Bearer.Pipe.html#PipeChannel"><span class="hs-identifier hs-type">PipeChannel</span></a></span><span> </span><span class="hs-special">{</span><span>
</span><span id="line-55"></span><span> </span><span class="annot"><span class="annottext">readHandle :: Int -> IO ByteString
</span><a href="Network.Mux.Bearer.Pipe.html#readHandle"><span class="hs-identifier hs-var">readHandle</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Handle -> Int -> IO ByteString
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-var">BL.hGet</span></a></span><span> </span><span class="annot"><span class="annottext">Handle
</span><a href="#local-6989586621679114598"><span class="hs-identifier hs-var">r</span></a></span><span class="hs-special">,</span><span>
</span><a href="#local-6989586621679114741"><span class="hs-identifier hs-var">r</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-56"></span><span> </span><span class="annot"><span class="annottext">writeHandle :: ByteString -> IO ()
</span><a href="Network.Mux.Bearer.Pipe.html#writeHandle"><span class="hs-identifier hs-var">writeHandle</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-glyph">\</span><span id="local-6989586621679114595"><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114595"><span class="hs-identifier hs-var">a</span></a></span></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="annottext">Handle -> ByteString -> IO ()
</span><a href="Network.Mux.Bearer.Pipe.html#writeHandle"><span class="hs-identifier hs-var">writeHandle</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-glyph">\</span><span id="local-6989586621679114738"><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114738"><span class="hs-identifier hs-var">a</span></a></span></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="annottext">Handle -> ByteString -> IO ()
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-var">BL.hPut</span></a></span><span> </span><span class="annot"><span class="annottext">Handle
</span><a href="#local-6989586621679114597"><span class="hs-identifier hs-var">w</span></a></span><span> </span><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114595"><span class="hs-identifier hs-var">a</span></a></span><span> </span><span class="annot"><span class="annottext">IO () -> IO () -> IO ()
</span><a href="#local-6989586621679114740"><span class="hs-identifier hs-var">w</span></a></span><span> </span><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114738"><span class="hs-identifier hs-var">a</span></a></span><span> </span><span class="annot"><span class="annottext">IO () -> IO () -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">>></span></a></span><span> </span><span class="annot"><span class="annottext">Handle -> IO ()
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-var">hFlush</span></a></span><span> </span><span class="annot"><span class="annottext">Handle
</span><a href="#local-6989586621679114597"><span class="hs-identifier hs-var">w</span></a></span><span>
</span><a href="#local-6989586621679114740"><span class="hs-identifier hs-var">w</span></a></span><span>
</span><span id="line-57"></span><span> </span><span class="hs-special">}</span><span class="hs-cpp">
#if defined(mingw32_HOST_OS)
</span><span id="line-74"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Network.Mux.Bearer.Pipe.html#PipeChannel"><span class="hs-identifier hs-type">PipeChannel</span></a></span><span>
</span><span id="line-75"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Network.Mux.Types.html#MuxBearer"><span class="hs-identifier hs-type">MuxBearer</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/ghc-prim-0.6.1/src"><span class="hs-identifier hs-type">IO</span></a></span><span>
</span><span id="line-76"></span><span id="pipeAsMuxBearer"><span class="annot"><span class="annottext">pipeAsMuxBearer :: SDUSize -> Tracer IO MuxTrace -> PipeChannel -> MuxBearer IO
</span><a href="Network.Mux.Bearer.Pipe.html#pipeAsMuxBearer"><span class="hs-identifier hs-var hs-var">pipeAsMuxBearer</span></a></span></span><span> </span><span id="local-6989586621679114593"><span class="annot"><span class="annottext">SDUSize
</span><a href="#local-6989586621679114593"><span class="hs-identifier hs-var">sduSize</span></a></span></span><span> </span><span id="local-6989586621679114592"><span class="annot"><span class="annottext">Tracer IO MuxTrace
</span><a href="#local-6989586621679114592"><span class="hs-identifier hs-var">tracer</span></a></span></span><span> </span><span id="local-6989586621679114591"><span class="annot"><span class="annottext">PipeChannel
</span><a href="#local-6989586621679114591"><span class="hs-identifier hs-var">channel</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><a href="Network.Mux.Bearer.Pipe.html#pipeAsMuxBearer"><span class="hs-identifier hs-var hs-var">pipeAsMuxBearer</span></a></span></span><span> </span><span id="local-6989586621679114736"><span class="annot"><span class="annottext">SDUSize
</span><a href="#local-6989586621679114736"><span class="hs-identifier hs-var">sduSize</span></a></span></span><span> </span><span id="local-6989586621679114735"><span class="annot"><span class="annottext">Tracer IO MuxTrace
</span><a href="#local-6989586621679114735"><span class="hs-identifier hs-var">tracer</span></a></span></span><span> </span><span id="local-6989586621679114734"><span class="annot"><span class="annottext">PipeChannel
</span><a href="#local-6989586621679114734"><span class="hs-identifier hs-var">channel</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-77"></span><span> </span><span class="annot"><span class="annottext">MuxBearer :: forall (m :: * -> *).
(TimeoutFn m -> MuxSDU -> m Time)
-> (TimeoutFn m -> m (MuxSDU, Time)) -> SDUSize -> MuxBearer m
</span><a href="Network.Mux.Types.html#MuxBearer"><span class="hs-identifier hs-type">Mx.MuxBearer</span></a></span><span> </span><span class="hs-special">{</span><span>
</span><span id="line-78"></span><span> </span><span class="annot"><span class="annottext">read :: TimeoutFn IO -> IO (MuxSDU, Time)
</span><a href="Network.Mux.Types.html#read"><span class="hs-identifier hs-var">Mx.read</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TimeoutFn IO -> IO (MuxSDU, Time)
</span><a href="#local-6989586621679114588"><span class="hs-identifier hs-var">readPipe</span></a></span><span class="hs-special">,</span><span>
</span><a href="#local-6989586621679114731"><span class="hs-identifier hs-var">readPipe</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-79"></span><span> </span><span class="annot"><span class="annottext">write :: TimeoutFn IO -> MuxSDU -> IO Time
</span><a href="Network.Mux.Types.html#write"><span class="hs-identifier hs-var">Mx.write</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TimeoutFn IO -> MuxSDU -> IO Time
</span><a href="#local-6989586621679114586"><span class="hs-identifier hs-var">writePipe</span></a></span><span class="hs-special">,</span><span>
</span><a href="#local-6989586621679114729"><span class="hs-identifier hs-var">writePipe</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-80"></span><span> </span><span class="annot"><span class="annottext">sduSize :: SDUSize
</span><a href="Network.Mux.Types.html#sduSize"><span class="hs-identifier hs-var">Mx.sduSize</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">SDUSize
</span><a href="#local-6989586621679114593"><span class="hs-identifier hs-var">sduSize</span></a></span><span>
</span><a href="#local-6989586621679114736"><span class="hs-identifier hs-var">sduSize</span></a></span><span>
</span><span id="line-81"></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-82"></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-83"></span><span> </span><span class="annot"><a href="#local-6989586621679114588"><span class="hs-identifier hs-type">readPipe</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="Network.Mux.Timeout.html#TimeoutFn"><span class="hs-identifier hs-type">Mx.TimeoutFn</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/ghc-prim-0.6.1/src"><span class="hs-identifier hs-type">IO</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/ghc-prim-0.6.1/src"><span class="hs-identifier hs-type">IO</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Types.html#MuxSDU"><span class="hs-identifier hs-type">Mx.MuxSDU</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Time</span></span><span class="hs-special">)</span><span>
</span><span id="line-84"></span><span> </span><span id="local-6989586621679114588"><span class="annot"><span class="annottext">readPipe :: TimeoutFn IO -> IO (MuxSDU, Time)
</span><a href="#local-6989586621679114588"><span class="hs-identifier hs-var hs-var">readPipe</span></a></span></span><span> </span><span class="annot"><span class="annottext">TimeoutFn IO
</span><span id="line-83"></span><span> </span><span class="annot"><a href="#local-6989586621679114731"><span class="hs-identifier hs-type">readPipe</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="Network.Mux.Timeout.html#TimeoutFn"><span class="hs-identifier hs-type">Mx.TimeoutFn</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/ghc-prim-0.6.1/src"><span class="hs-identifier hs-type">IO</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/ghc-prim-0.6.1/src"><span class="hs-identifier hs-type">IO</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Types.html#MuxSDU"><span class="hs-identifier hs-type">Mx.MuxSDU</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Time</span></span><span class="hs-special">)</span><span>
</span><span id="line-84"></span><span> </span><span id="local-6989586621679114731"><span class="annot"><span class="annottext">readPipe :: TimeoutFn IO -> IO (MuxSDU, Time)
</span><a href="#local-6989586621679114731"><span class="hs-identifier hs-var hs-var">readPipe</span></a></span></span><span> </span><span class="annot"><span class="annottext">TimeoutFn IO
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-85"></span><span> </span><span class="annot"><span class="annottext">Tracer IO MuxTrace -> MuxTrace -> IO ()
forall (m :: * -> *) a. Tracer m a -> a -> m ()
</span><span class="hs-identifier hs-var">traceWith</span></span><span> </span><span class="annot"><span class="annottext">Tracer IO MuxTrace
</span><a href="#local-6989586621679114592"><span class="hs-identifier hs-var">tracer</span></a></span><span> </span><span class="annot"><span class="annottext">(MuxTrace -> IO ()) -> MuxTrace -> IO ()
</span><a href="#local-6989586621679114735"><span class="hs-identifier hs-var">tracer</span></a></span><span> </span><span class="annot"><span class="annottext">(MuxTrace -> IO ()) -> MuxTrace -> IO ()
forall a b. (a -> b) -> a -> b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">MuxTrace
</span><a href="Network.Mux.Trace.html#MuxTraceRecvHeaderStart"><span class="hs-identifier hs-var">Mx.MuxTraceRecvHeaderStart</span></a></span><span>
</span><span id="line-86"></span><span> </span><span id="local-6989586621679114582"><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114582"><span class="hs-identifier hs-var">hbuf</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">Int -> [ByteString] -> IO ByteString
</span><a href="#local-6989586621679114581"><span class="hs-identifier hs-var">recvLen'</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span id="line-86"></span><span> </span><span id="local-6989586621679114725"><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114725"><span class="hs-identifier hs-var">hbuf</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">Int -> [ByteString] -> IO ByteString
</span><a href="#local-6989586621679114724"><span class="hs-identifier hs-var">recvLen'</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">8</span></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
</span><span id="line-87"></span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">ByteString -> Either MuxError MuxSDU
</span><a href="Network.Mux.Codec.html#decodeMuxSDU"><span class="hs-identifier hs-var">Mx.decodeMuxSDU</span></a></span><span> </span><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114582"><span class="hs-identifier hs-var">hbuf</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-88"></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Left</span></a></span><span> </span><span id="local-6989586621679114579"><span class="annot"><span class="annottext">MuxError
</span><a href="#local-6989586621679114579"><span class="hs-identifier hs-var">e</span></a></span></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="annottext">MuxError -> IO (MuxSDU, Time)
</span><a href="#local-6989586621679114725"><span class="hs-identifier hs-var">hbuf</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-88"></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Left</span></a></span><span> </span><span id="local-6989586621679114722"><span class="annot"><span class="annottext">MuxError
</span><a href="#local-6989586621679114722"><span class="hs-identifier hs-var">e</span></a></span></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="annottext">MuxError -> IO (MuxSDU, Time)
forall (m :: * -> *) e a. (MonadThrow m, Exception e) => e -> m a
</span><span class="hs-identifier hs-var">throwIO</span></span><span> </span><span class="annot"><span class="annottext">MuxError
</span><a href="#local-6989586621679114579"><span class="hs-identifier hs-var">e</span></a></span><span>
</span><span id="line-89"></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Right</span></a></span><span> </span><span id="local-6989586621679114577"><span class="annot"><span class="annottext">header :: MuxSDU
</span><a href="#local-6989586621679114577"><span class="hs-identifier hs-var">header</span></a></span></span><span class="hs-glyph">@</span><span class="annot"><a href="Network.Mux.Types.html#MuxSDU"><span class="hs-identifier hs-type">Mx.MuxSDU</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span id="local-6989586621679114575"><span class="annot"><span class="annottext">MuxSDUHeader
</span><a href="#local-6989586621679114722"><span class="hs-identifier hs-var">e</span></a></span><span>
</span><span id="line-89"></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Right</span></a></span><span> </span><span id="local-6989586621679114720"><span class="annot"><span class="annottext">header :: MuxSDU
</span><a href="#local-6989586621679114720"><span class="hs-identifier hs-var">header</span></a></span></span><span class="hs-glyph">@</span><span class="annot"><a href="Network.Mux.Types.html#MuxSDU"><span class="hs-identifier hs-type">Mx.MuxSDU</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span id="local-6989586621679114718"><span class="annot"><span class="annottext">MuxSDUHeader
msHeader :: MuxSDU -> MuxSDUHeader
msHeader :: MuxSDUHeader
</span><a href="Network.Mux.Types.html#msHeader"><span class="hs-identifier hs-var hs-var">Mx.msHeader</span></a></span></span><span> </span><span class="hs-special">}</span><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-90"></span><span> </span><span class="annot"><span class="annottext">Tracer IO MuxTrace -> MuxTrace -> IO ()
forall (m :: * -> *) a. Tracer m a -> a -> m ()
</span><span class="hs-identifier hs-var">traceWith</span></span><span> </span><span class="annot"><span class="annottext">Tracer IO MuxTrace
</span><a href="#local-6989586621679114592"><span class="hs-identifier hs-var">tracer</span></a></span><span> </span><span class="annot"><span class="annottext">(MuxTrace -> IO ()) -> MuxTrace -> IO ()
</span><a href="#local-6989586621679114735"><span class="hs-identifier hs-var">tracer</span></a></span><span> </span><span class="annot"><span class="annottext">(MuxTrace -> IO ()) -> MuxTrace -> IO ()
forall a b. (a -> b) -> a -> b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">MuxSDUHeader -> MuxTrace
</span><a href="Network.Mux.Trace.html#MuxTraceRecvHeaderEnd"><span class="hs-identifier hs-var">Mx.MuxTraceRecvHeaderEnd</span></a></span><span> </span><span class="annot"><span class="annottext">MuxSDUHeader
</span><a href="#local-6989586621679114575"><span class="hs-identifier hs-var">msHeader</span></a></span><span>
</span><span id="line-91"></span><span> </span><span id="local-6989586621679114572"><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114572"><span class="hs-identifier hs-var">blob</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">Int -> [ByteString] -> IO ByteString
</span><a href="#local-6989586621679114581"><span class="hs-identifier hs-var">recvLen'</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Word16 -> Int
</span><a href="#local-6989586621679114718"><span class="hs-identifier hs-var">msHeader</span></a></span><span>
</span><span id="line-91"></span><span> </span><span id="local-6989586621679114715"><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114715"><span class="hs-identifier hs-var">blob</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">Int -> [ByteString] -> IO ByteString
</span><a href="#local-6989586621679114724"><span class="hs-identifier hs-var">recvLen'</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Word16 -> Int
forall a b. (Integral a, Num b) => a -> b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-var">fromIntegral</span></a></span><span> </span><span class="annot"><span class="annottext">(Word16 -> Int) -> Word16 -> Int
forall a b. (a -> b) -> a -> b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">MuxSDUHeader -> Word16
</span><a href="Network.Mux.Types.html#mhLength"><span class="hs-identifier hs-var hs-var">Mx.mhLength</span></a></span><span> </span><span class="annot"><span class="annottext">MuxSDUHeader
</span><a href="#local-6989586621679114575"><span class="hs-identifier hs-var">msHeader</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
</span><span id="line-92"></span><span> </span><span id="local-6989586621679114570"><span class="annot"><span class="annottext">Time
</span><a href="#local-6989586621679114570"><span class="hs-identifier hs-var">ts</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">IO Time
</span><a href="#local-6989586621679114718"><span class="hs-identifier hs-var">msHeader</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
</span><span id="line-92"></span><span> </span><span id="local-6989586621679114713"><span class="annot"><span class="annottext">Time
</span><a href="#local-6989586621679114713"><span class="hs-identifier hs-var">ts</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">IO Time
forall (m :: * -> *). MonadMonotonicTime m => m Time
</span><span class="hs-identifier hs-var">getMonotonicTime</span></span><span>
</span><span id="line-93"></span><span> </span><span class="annot"><span class="annottext">Tracer IO MuxTrace -> MuxTrace -> IO ()
forall (m :: * -> *) a. Tracer m a -> a -> m ()
</span><span class="hs-identifier hs-var">traceWith</span></span><span> </span><span class="annot"><span class="annottext">Tracer IO MuxTrace
</span><a href="#local-6989586621679114592"><span class="hs-identifier hs-var">tracer</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">MuxSDUHeader -> Time -> MuxTrace
</span><a href="#local-6989586621679114735"><span class="hs-identifier hs-var">tracer</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">MuxSDUHeader -> Time -> MuxTrace
</span><a href="Network.Mux.Trace.html#MuxTraceRecvDeltaQObservation"><span class="hs-identifier hs-var">Mx.MuxTraceRecvDeltaQObservation</span></a></span><span> </span><span class="annot"><span class="annottext">MuxSDUHeader
</span><a href="#local-6989586621679114575"><span class="hs-identifier hs-var">msHeader</span></a></span><span> </span><span class="annot"><span class="annottext">Time
</span><a href="#local-6989586621679114570"><span class="hs-identifier hs-var">ts</span></a></span><span class="hs-special">)</span><span>
</span><a href="#local-6989586621679114718"><span class="hs-identifier hs-var">msHeader</span></a></span><span> </span><span class="annot"><span class="annottext">Time
</span><a href="#local-6989586621679114713"><span class="hs-identifier hs-var">ts</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-94"></span><span> </span><span class="annot"><span class="annottext">(MuxSDU, Time) -> IO (MuxSDU, Time)
forall (m :: * -> *) a. Monad m => a -> m a
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">MuxSDU
</span><a href="#local-6989586621679114577"><span class="hs-identifier hs-var">header</span></a></span><span> </span><span class="hs-special">{</span><span class="annot"><span class="annottext">msBlob :: ByteString
</span><a href="#local-6989586621679114720"><span class="hs-identifier hs-var">header</span></a></span><span> </span><span class="hs-special">{</span><span class="annot"><span class="annottext">msBlob :: ByteString
</span><a href="Network.Mux.Types.html#msBlob"><span class="hs-identifier hs-var">Mx.msBlob</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114572"><span class="hs-identifier hs-var">blob</span></a></span><span class="hs-special">}</span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Time
</span><a href="#local-6989586621679114570"><span class="hs-identifier hs-var">ts</span></a></span><span class="hs-special">)</span><span>
</span><a href="#local-6989586621679114715"><span class="hs-identifier hs-var">blob</span></a></span><span class="hs-special">}</span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Time
</span><a href="#local-6989586621679114713"><span class="hs-identifier hs-var">ts</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-95"></span><span>
</span><span id="line-96"></span><span> </span><span class="annot"><a href="#local-6989586621679114581"><span class="hs-identifier hs-type">recvLen'</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/ghc-prim-0.6.1/src"><span class="hs-identifier hs-type">Int</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-special">[</span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-type">BL.ByteString</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/ghc-prim-0.6.1/src"><span class="hs-identifier hs-type">IO</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-type">BL.ByteString</span></a></span><span>
</span><span id="line-97"></span><span> </span><span id="local-6989586621679114581"><span class="annot"><span class="annottext">recvLen' :: Int -> [ByteString] -> IO ByteString
</span><a href="#local-6989586621679114581"><span class="hs-identifier hs-var hs-var">recvLen'</span></a></span></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span> </span><span id="local-6989586621679114566"><span class="annot"><span class="annottext">[ByteString]
</span><a href="#local-6989586621679114566"><span class="hs-identifier hs-var">bufs</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">ByteString -> IO ByteString
</span><span id="line-96"></span><span> </span><span class="annot"><a href="#local-6989586621679114724"><span class="hs-identifier hs-type">recvLen'</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/ghc-prim-0.6.1/src"><span class="hs-identifier hs-type">Int</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-special">[</span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-type">BL.ByteString</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/ghc-prim-0.6.1/src"><span class="hs-identifier hs-type">IO</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-type">BL.ByteString</span></a></span><span>
</span><span id="line-97"></span><span> </span><span id="local-6989586621679114724"><span class="annot"><span class="annottext">recvLen' :: Int -> [ByteString] -> IO ByteString
</span><a href="#local-6989586621679114724"><span class="hs-identifier hs-var hs-var">recvLen'</span></a></span></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span> </span><span id="local-6989586621679114709"><span class="annot"><span class="annottext">[ByteString]
</span><a href="#local-6989586621679114709"><span class="hs-identifier hs-var">bufs</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">ByteString -> IO ByteString
forall (m :: * -> *) a. Monad m => a -> m a
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">(ByteString -> IO ByteString) -> ByteString -> IO ByteString
forall a b. (a -> b) -> a -> b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">[ByteString] -> [ByteString]
forall a. [a] -> [a]
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-var">reverse</span></a></span><span> </span><span class="annot"><span class="annottext">[ByteString]
</span><a href="#local-6989586621679114566"><span class="hs-identifier hs-var">bufs</span></a></span><span>
</span><span id="line-98"></span><span> </span><span class="annot"><a href="#local-6989586621679114581"><span class="hs-identifier hs-var">recvLen'</span></a></span><span> </span><span id="local-6989586621679114563"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621679114563"><span class="hs-identifier hs-var">l</span></a></span></span><span> </span><span id="local-6989586621679114562"><span class="annot"><span class="annottext">[ByteString]
</span><a href="#local-6989586621679114562"><span class="hs-identifier hs-var">bufs</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><a href="#local-6989586621679114709"><span class="hs-identifier hs-var">bufs</span></a></span><span>
</span><span id="line-98"></span><span> </span><span class="annot"><a href="#local-6989586621679114724"><span class="hs-identifier hs-var">recvLen'</span></a></span><span> </span><span id="local-6989586621679114706"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621679114706"><span class="hs-identifier hs-var">l</span></a></span></span><span> </span><span id="local-6989586621679114705"><span class="annot"><span class="annottext">[ByteString]
</span><a href="#local-6989586621679114705"><span class="hs-identifier hs-var">bufs</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-99"></span><span> </span><span class="annot"><span class="annottext">Tracer IO MuxTrace -> MuxTrace -> IO ()
forall (m :: * -> *) a. Tracer m a -> a -> m ()
</span><span class="hs-identifier hs-var">traceWith</span></span><span> </span><span class="annot"><span class="annottext">Tracer IO MuxTrace
</span><a href="#local-6989586621679114592"><span class="hs-identifier hs-var">tracer</span></a></span><span> </span><span class="annot"><span class="annottext">(MuxTrace -> IO ()) -> MuxTrace -> IO ()
</span><a href="#local-6989586621679114735"><span class="hs-identifier hs-var">tracer</span></a></span><span> </span><span class="annot"><span class="annottext">(MuxTrace -> IO ()) -> MuxTrace -> IO ()
forall a b. (a -> b) -> a -> b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Int -> MuxTrace
</span><a href="Network.Mux.Trace.html#MuxTraceRecvStart"><span class="hs-identifier hs-var">Mx.MuxTraceRecvStart</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621679114563"><span class="hs-identifier hs-var">l</span></a></span><span>
</span><span id="line-100"></span><span> </span><span id="local-6989586621679114560"><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114560"><span class="hs-identifier hs-var">buf</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">PipeChannel -> Int -> IO ByteString
</span><a href="#local-6989586621679114706"><span class="hs-identifier hs-var">l</span></a></span><span>
</span><span id="line-100"></span><span> </span><span id="local-6989586621679114703"><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114703"><span class="hs-identifier hs-var">buf</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">PipeChannel -> Int -> IO ByteString
</span><a href="Network.Mux.Bearer.Pipe.html#readHandle"><span class="hs-identifier hs-var hs-var">readHandle</span></a></span><span> </span><span class="annot"><span class="annottext">PipeChannel
</span><a href="#local-6989586621679114591"><span class="hs-identifier hs-var">channel</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621679114563"><span class="hs-identifier hs-var">l</span></a></span><span>
</span><a href="#local-6989586621679114734"><span class="hs-identifier hs-var">channel</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621679114706"><span class="hs-identifier hs-var">l</span></a></span><span>
</span><span id="line-101"></span><span> </span><span class="annot"><span class="annottext">IO ByteString -> (IOException -> IO ByteString) -> IO ByteString
</span><span id="line-22"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="Network.Mux.Types.html"><span class="hs-identifier">Network.Mux.Types</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Types.html#MuxBearer"><span class="hs-identifier">MuxBearer</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-23"></span><span class="hs-keyword">import</span><span> </span><span class="hs-keyword">qualified</span><span> </span><span class="annot"><a href="Network.Mux.Types.html"><span class="hs-identifier">Network.Mux.Types</span></a></span><span> </span><span class="hs-keyword">as</span><span> </span><span class="annot"><span class="hs-identifier">Mx</span></span><span>
</span><span id="line-24"></span><span>
</span><span id="line-25"></span><span class="hs-keyword">data</span><span> </span><span id="QueueChannel"><span class="annot"><a href="Network.Mux.Bearer.Queues.html#QueueChannel"><span class="hs-identifier hs-var">QueueChannel</span></a></span></span><span> </span><span id="local-6989586621679114531"><span class="annot"><a href="#local-6989586621679114531"><span class="hs-identifier hs-type">m</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="QueueChannel"><span class="annot"><a href="Network.Mux.Bearer.Queues.html#QueueChannel"><span class="hs-identifier hs-var">QueueChannel</span></a></span></span><span> </span><span class="hs-special">{</span><span>
</span><span id="line-25"></span><span class="hs-keyword">data</span><span> </span><span id="QueueChannel"><span class="annot"><a href="Network.Mux.Bearer.Queues.html#QueueChannel"><span class="hs-identifier hs-var">QueueChannel</span></a></span></span><span> </span><span id="local-6989586621679114674"><span class="annot"><a href="#local-6989586621679114674"><span class="hs-identifier hs-type">m</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="QueueChannel"><span class="annot"><a href="Network.Mux.Bearer.Queues.html#QueueChannel"><span class="hs-identifier hs-var">QueueChannel</span></a></span></span><span> </span><span class="hs-special">{</span><span>
</span><span id="line-26"></span><span> </span><span id="readQueue"><span class="annot"><span class="annottext">QueueChannel m -> StrictTBQueue m ByteString
</span><a href="Network.Mux.Bearer.Queues.html#readQueue"><span class="hs-identifier hs-var hs-var">readQueue</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><span class="hs-identifier hs-type">StrictTBQueue</span></span><span> </span><span class="annot"><a href="#local-6989586621679114531"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-type">BL.ByteString</span></a></span><span class="hs-special">,</span><span>
</span><a href="Network.Mux.Bearer.Queues.html#readQueue"><span class="hs-identifier hs-var hs-var">readQueue</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><span class="hs-identifier hs-type">StrictTBQueue</span></span><span> </span><span class="annot"><a href="#local-6989586621679114674"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-type">BL.ByteString</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-27"></span><span> </span><span id="writeQueue"><span class="annot"><span class="annottext">QueueChannel m -> StrictTBQueue m ByteString
</span><a href="Network.Mux.Bearer.Queues.html#writeQueue"><span class="hs-identifier hs-var hs-var">writeQueue</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><span class="hs-identifier hs-type">StrictTBQueue</span></span><span> </span><span class="annot"><a href="#local-6989586621679114531"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-type">BL.ByteString</span></a></span><span>
</span><a href="Network.Mux.Bearer.Queues.html#writeQueue"><span class="hs-identifier hs-var hs-var">writeQueue</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><span class="hs-identifier hs-type">StrictTBQueue</span></span><span> </span><span class="annot"><a href="#local-6989586621679114674"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-type">BL.ByteString</span></a></span><span>
</span><span id="line-28"></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-29"></span><span>
</span><span id="line-30"></span><span>
</span><span id="line-31"></span><span class="annot"><a href="Network.Mux.Bearer.Queues.html#queueChannelAsMuxBearer"><span class="hs-identifier hs-type">queueChannelAsMuxBearer</span></a></span><span>
</span><span id="line-32"></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-keyword">forall</span><span> </span><span id="local-6989586621679114496"><span class="annot"><a href="#local-6989586621679114496"><span class="hs-identifier hs-type">m</span></a></span></span><span class="hs-operator">.</span><span>
</span><span id="line-33"></span><span> </span><span class="hs-special">(</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadSTM</span></span><span> </span><span class="annot"><a href="#local-6989586621679114496"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-34"></span><span> </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadTime</span></span><span> </span><span class="annot"><a href="#local-6989586621679114496"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-35"></span><span> </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadThrow</span></span><span> </span><span class="annot"><a href="#local-6989586621679114496"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-32"></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-keyword">forall</span><span> </span><span id="local-6989586621679114639"><span class="annot"><a href="#local-6989586621679114639"><span class="hs-identifier hs-type">m</span></a></span></span><span class="hs-operator">.</span><span>
</span><span id="line-33"></span><span> </span><span class="hs-special">(</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadSTM</span></span><span> </span><span class="annot"><a href="#local-6989586621679114639"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-34"></span><span> </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadTime</span></span><span> </span><span class="annot"><a href="#local-6989586621679114639"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-35"></span><span> </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadThrow</span></span><span> </span><span class="annot"><a href="#local-6989586621679114639"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-36"></span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-37"></span><span> </span><span class="hs-glyph">=></span><span> </span><span class="annot"><a href="Network.Mux.Types.html#SDUSize"><span class="hs-identifier hs-type">Mx.SDUSize</span></a></span><span>
</span><span id="line-38"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="hs-identifier hs-type">Tracer</span></span><span> </span><span class="annot"><a href="#local-6989586621679114496"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="Network.Mux.Trace.html#MuxTrace"><span class="hs-identifier hs-type">Mx.MuxTrace</span></a></span><span>
</span><span id="line-39"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Network.Mux.Bearer.Queues.html#QueueChannel"><span class="hs-identifier hs-type">QueueChannel</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679114496"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-40"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Network.Mux.Types.html#MuxBearer"><span class="hs-identifier hs-type">MuxBearer</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679114496"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-38"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="hs-identifier hs-type">Tracer</span></span><span> </span><span class="annot"><a href="#local-6989586621679114639"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="Network.Mux.Trace.html#MuxTrace"><span class="hs-identifier hs-type">Mx.MuxTrace</span></a></span><span>
</span><span id="line-39"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Network.Mux.Bearer.Queues.html#QueueChannel"><span class="hs-identifier hs-type">QueueChannel</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679114639"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-40"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Network.Mux.Types.html#MuxBearer"><span class="hs-identifier hs-type">MuxBearer</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679114639"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-41"></span><span id="queueChannelAsMuxBearer"><span class="annot"><span class="annottext">queueChannelAsMuxBearer :: SDUSize -> Tracer m MuxTrace -> QueueChannel m -> MuxBearer m
</span><a href="Network.Mux.Bearer.Queues.html#queueChannelAsMuxBearer"><span class="hs-identifier hs-var hs-var">queueChannelAsMuxBearer</span></a></span></span><span> </span><span id="local-6989586621679114494"><span class="annot"><span class="annottext">SDUSize
</span><a href="#local-6989586621679114494"><span class="hs-identifier hs-var">sduSize</span></a></span></span><span> </span><span id="local-6989586621679114493"><span class="annot"><span class="annottext">Tracer m MuxTrace
</span><a href="#local-6989586621679114493"><span class="hs-identifier hs-var">tracer</span></a></span></span><span> </span><span class="annot"><a href="Network.Mux.Bearer.Queues.html#QueueChannel"><span class="hs-identifier hs-type">QueueChannel</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span id="local-6989586621679114492"><span class="annot"><span class="annottext">StrictTBQueue m ByteString
</span><a href="Network.Mux.Bearer.Queues.html#queueChannelAsMuxBearer"><span class="hs-identifier hs-var hs-var">queueChannelAsMuxBearer</span></a></span></span><span> </span><span id="local-6989586621679114637"><span class="annot"><span class="annottext">SDUSize
</span><a href="#local-6989586621679114637"><span class="hs-identifier hs-var">sduSize</span></a></span></span><span> </span><span id="local-6989586621679114636"><span class="annot"><span class="annottext">Tracer m MuxTrace
</span><a href="#local-6989586621679114636"><span class="hs-identifier hs-var">tracer</span></a></span></span><span> </span><span class="annot"><a href="Network.Mux.Bearer.Queues.html#QueueChannel"><span class="hs-identifier hs-type">QueueChannel</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span id="local-6989586621679114635"><span class="annot"><span class="annottext">StrictTBQueue m ByteString
writeQueue :: StrictTBQueue m ByteString
writeQueue :: forall (m :: * -> *). QueueChannel m -> StrictTBQueue m ByteString
</span><a href="#local-6989586621679114492"><span class="hs-identifier hs-var hs-var">writeQueue</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621679114491"><span class="annot"><span class="annottext">StrictTBQueue m ByteString
</span><a href="#local-6989586621679114635"><span class="hs-identifier hs-var hs-var">writeQueue</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621679114634"><span class="annot"><span class="annottext">StrictTBQueue m ByteString
readQueue :: StrictTBQueue m ByteString
readQueue :: forall (m :: * -> *). QueueChannel m -> StrictTBQueue m ByteString
</span><a href="#local-6989586621679114491"><span class="hs-identifier hs-var hs-var">readQueue</span></a></span></span><span> </span><span class="hs-special">}</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><a href="#local-6989586621679114634"><span class="hs-identifier hs-var hs-var">readQueue</span></a></span></span><span> </span><span class="hs-special">}</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-42"></span><span> </span><span class="annot"><span class="annottext">MuxBearer :: forall (m :: * -> *).
(TimeoutFn m -> MuxSDU -> m Time)
-> (TimeoutFn m -> m (MuxSDU, Time)) -> SDUSize -> MuxBearer m
</span><a href="Network.Mux.Types.html#MuxBearer"><span class="hs-identifier hs-type">Mx.MuxBearer</span></a></span><span> </span><span class="hs-special">{</span><span>
</span><span id="line-43"></span><span> </span><span class="annot"><span class="annottext">read :: TimeoutFn m -> m (MuxSDU, Time)
</span><a href="Network.Mux.Types.html#read"><span class="hs-identifier hs-var">Mx.read</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TimeoutFn m -> m (MuxSDU, Time)
</span><a href="#local-6989586621679114488"><span class="hs-identifier hs-var">readMux</span></a></span><span class="hs-special">,</span><span>
</span><a href="#local-6989586621679114631"><span class="hs-identifier hs-var">readMux</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-44"></span><span> </span><span class="annot"><span class="annottext">write :: TimeoutFn m -> MuxSDU -> m Time
</span><a href="Network.Mux.Types.html#write"><span class="hs-identifier hs-var">Mx.write</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TimeoutFn m -> MuxSDU -> m Time
</span><a href="#local-6989586621679114486"><span class="hs-identifier hs-var">writeMux</span></a></span><span class="hs-special">,</span><span>
</span><a href="#local-6989586621679114629"><span class="hs-identifier hs-var">writeMux</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-45"></span><span> </span><span class="annot"><span class="annottext">sduSize :: SDUSize
</span><a href="Network.Mux.Types.html#sduSize"><span class="hs-identifier hs-var">Mx.sduSize</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">SDUSize
</span><a href="#local-6989586621679114494"><span class="hs-identifier hs-var">sduSize</span></a></span><span>
</span><a href="#local-6989586621679114637"><span class="hs-identifier hs-var">sduSize</span></a></span><span>
</span><span id="line-46"></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-47"></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-48"></span><span> </span><span class="annot"><a href="#local-6989586621679114488"><span class="hs-identifier hs-type">readMux</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="Network.Mux.Timeout.html#TimeoutFn"><span class="hs-identifier hs-type">Mx.TimeoutFn</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679114496"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679114496"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Types.html#MuxSDU"><span class="hs-identifier hs-type">Mx.MuxSDU</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Time</span></span><span class="hs-special">)</span><span>
</span><span id="line-49"></span><span> </span><span id="local-6989586621679114488"><span class="annot"><span class="annottext">readMux :: TimeoutFn m -> m (MuxSDU, Time)
</span><a href="#local-6989586621679114488"><span class="hs-identifier hs-var hs-var">readMux</span></a></span></span><span> </span><span class="annot"><span class="annottext">TimeoutFn m
</span><span id="line-48"></span><span> </span><span class="annot"><a href="#local-6989586621679114631"><span class="hs-identifier hs-type">readMux</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="Network.Mux.Timeout.html#TimeoutFn"><span class="hs-identifier hs-type">Mx.TimeoutFn</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679114639"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679114639"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Types.html#MuxSDU"><span class="hs-identifier hs-type">Mx.MuxSDU</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Time</span></span><span class="hs-special">)</span><span>
</span><span id="line-49"></span><span> </span><span id="local-6989586621679114631"><span class="annot"><span class="annottext">readMux :: TimeoutFn m -> m (MuxSDU, Time)
</span><a href="#local-6989586621679114631"><span class="hs-identifier hs-var hs-var">readMux</span></a></span></span><span> </span><span class="annot"><span class="annottext">TimeoutFn m
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-50"></span><span> </span><span class="annot"><span class="annottext">Tracer m MuxTrace -> MuxTrace -> m ()
forall (m :: * -> *) a. Tracer m a -> a -> m ()
</span><span class="hs-identifier hs-var">traceWith</span></span><span> </span><span class="annot"><span class="annottext">Tracer m MuxTrace
</span><a href="#local-6989586621679114493"><span class="hs-identifier hs-var">tracer</span></a></span><span> </span><span class="annot"><span class="annottext">(MuxTrace -> m ()) -> MuxTrace -> m ()
</span><a href="#local-6989586621679114636"><span class="hs-identifier hs-var">tracer</span></a></span><span> </span><span class="annot"><span class="annottext">(MuxTrace -> m ()) -> MuxTrace -> m ()
forall a b. (a -> b) -> a -> b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">MuxTrace
</span><a href="Network.Mux.Trace.html#MuxTraceRecvHeaderStart"><span class="hs-identifier hs-var">Mx.MuxTraceRecvHeaderStart</span></a></span><span>
</span><span id="line-51"></span><span> </span><span id="local-6989586621679114482"><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114482"><span class="hs-identifier hs-var">buf</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">STM m ByteString -> m ByteString
</span><span id="line-51"></span><span> </span><span id="local-6989586621679114625"><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114625"><span class="hs-identifier hs-var">buf</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">STM m ByteString -> m ByteString
forall (m :: * -> *) a.
(MonadSTM m, HasCallStack) =>
STM m a -> m a
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">StrictTBQueue m ByteString -> STM m ByteString
forall (m :: * -> *) a. MonadSTM m => StrictTBQueue m a -> STM m a
</span><span class="hs-identifier hs-var">readTBQueue</span></span><span> </span><span class="annot"><span class="annottext">StrictTBQueue m ByteString
</span><a href="#local-6989586621679114491"><span class="hs-identifier hs-var">readQueue</span></a></span><span>
</span><span id="line-52"></span><span> </span><span class="hs-keyword">let</span><span> </span><span class="hs-special">(</span><span id="local-6989586621679114479"><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114479"><span class="hs-identifier hs-var">hbuf</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621679114478"><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114478"><span class="hs-identifier hs-var">payload</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Int64 -> ByteString -> (ByteString, ByteString)
</span><a href="#local-6989586621679114634"><span class="hs-identifier hs-var">readQueue</span></a></span><span>
</span><span id="line-52"></span><span> </span><span class="hs-keyword">let</span><span> </span><span class="hs-special">(</span><span id="local-6989586621679114622"><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114622"><span class="hs-identifier hs-var">hbuf</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621679114621"><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114621"><span class="hs-identifier hs-var">payload</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Int64 -> ByteString -> (ByteString, ByteString)
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-var">BL.splitAt</span></a></span><span> </span><span class="annot"><span class="annottext">Int64
</span><span class="hs-number">8</span></span><span> </span><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114482"><span class="hs-identifier hs-var">buf</span></a></span><span>
</span><a href="#local-6989586621679114625"><span class="hs-identifier hs-var">buf</span></a></span><span>
</span><span id="line-53"></span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">ByteString -> Either MuxError MuxSDU
</span><a href="Network.Mux.Codec.html#decodeMuxSDU"><span class="hs-identifier hs-var">Mx.decodeMuxSDU</span></a></span><span> </span><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114479"><span class="hs-identifier hs-var">hbuf</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-54"></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Left</span></a></span><span> </span><span id="local-6989586621679114475"><span class="annot"><span class="annottext">MuxError
</span><a href="#local-6989586621679114475"><span class="hs-identifier hs-var">e</span></a></span></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="annottext">MuxError -> m (MuxSDU, Time)
</span><a href="#local-6989586621679114622"><span class="hs-identifier hs-var">hbuf</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-54"></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Left</span></a></span><span> </span><span id="local-6989586621679114618"><span class="annot"><span class="annottext">MuxError
</span><a href="#local-6989586621679114618"><span class="hs-identifier hs-var">e</span></a></span></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="annottext">MuxError -> m (MuxSDU, Time)
forall (m :: * -> *) e a. (MonadThrow m, Exception e) => e -> m a
</span><span class="hs-identifier hs-var">throwIO</span></span><span> </span><span class="annot"><span class="annottext">MuxError
</span><a href="#local-6989586621679114475"><span class="hs-identifier hs-var">e</span></a></span><span>
</span><span id="line-55"></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Right</span></a></span><span> </span><span id="local-6989586621679114473"><span class="annot"><span class="annottext">MuxSDU
</span><a href="#local-6989586621679114473"><span class="hs-identifier hs-var">header</span></a></span></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-keyword">do</span><span>
</span><a href="#local-6989586621679114618"><span class="hs-identifier hs-var">e</span></a></span><span>
</span><span id="line-55"></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Right</span></a></span><span> </span><span id="local-6989586621679114616"><span class="annot"><span class="annottext">MuxSDU
</span><a href="#local-6989586621679114616"><span class="hs-identifier hs-var">header</span></a></span></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-56"></span><span> </span><span class="annot"><span class="annottext">Tracer m MuxTrace -> MuxTrace -> m ()
forall (m :: * -> *) a. Tracer m a -> a -> m ()
</span><span class="hs-identifier hs-var">traceWith</span></span><span> </span><span class="annot"><span class="annottext">Tracer m MuxTrace
</span><a href="#local-6989586621679114493"><span class="hs-identifier hs-var">tracer</span></a></span><span> </span><span class="annot"><span class="annottext">(MuxTrace -> m ()) -> MuxTrace -> m ()
</span><a href="#local-6989586621679114636"><span class="hs-identifier hs-var">tracer</span></a></span><span> </span><span class="annot"><span class="annottext">(MuxTrace -> m ()) -> MuxTrace -> m ()
forall a b. (a -> b) -> a -> b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">MuxSDUHeader -> MuxTrace
</span><a href="Network.Mux.Trace.html#MuxTraceRecvHeaderEnd"><span class="hs-identifier hs-var">Mx.MuxTraceRecvHeaderEnd</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">MuxSDU -> MuxSDUHeader
</span><a href="Network.Mux.Types.html#msHeader"><span class="hs-identifier hs-var hs-var">Mx.msHeader</span></a></span><span> </span><span class="annot"><span class="annottext">MuxSDU
</span><a href="#local-6989586621679114473"><span class="hs-identifier hs-var">header</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-57"></span><span> </span><span id="local-6989586621679114470"><span class="annot"><span class="annottext">Time
</span><a href="#local-6989586621679114470"><span class="hs-identifier hs-var">ts</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">m Time
</span><a href="#local-6989586621679114616"><span class="hs-identifier hs-var">header</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-57"></span><span> </span><span id="local-6989586621679114613"><span class="annot"><span class="annottext">Time
</span><a href="#local-6989586621679114613"><span class="hs-identifier hs-var">ts</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">m Time
forall (m :: * -> *). MonadMonotonicTime m => m Time
</span><span class="hs-identifier hs-var">getMonotonicTime</span></span><span>
</span><span id="line-58"></span><span> </span><span class="annot"><span class="annottext">Tracer m MuxTrace -> MuxTrace -> m ()
forall (m :: * -> *) a. Tracer m a -> a -> m ()
</span><span class="hs-identifier hs-var">traceWith</span></span><span> </span><span class="annot"><span class="annottext">Tracer m MuxTrace
</span><a href="#local-6989586621679114493"><span class="hs-identifier hs-var">tracer</span></a></span><span> </span><span class="annot"><span class="annottext">(MuxTrace -> m ()) -> MuxTrace -> m ()
</span><a href="#local-6989586621679114636"><span class="hs-identifier hs-var">tracer</span></a></span><span> </span><span class="annot"><span class="annottext">(MuxTrace -> m ()) -> MuxTrace -> m ()
forall a b. (a -> b) -> a -> b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">MuxSDUHeader -> Time -> MuxTrace
</span><a href="Network.Mux.Trace.html#MuxTraceRecvDeltaQObservation"><span class="hs-identifier hs-var">Mx.MuxTraceRecvDeltaQObservation</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">MuxSDU -> MuxSDUHeader
</span><a href="Network.Mux.Types.html#msHeader"><span class="hs-identifier hs-var hs-var">Mx.msHeader</span></a></span><span> </span><span class="annot"><span class="annottext">MuxSDU
</span><a href="#local-6989586621679114473"><span class="hs-identifier hs-var">header</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Time
</span><a href="#local-6989586621679114470"><span class="hs-identifier hs-var">ts</span></a></span><span>
</span><a href="#local-6989586621679114616"><span class="hs-identifier hs-var">header</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Time
</span><a href="#local-6989586621679114613"><span class="hs-identifier hs-var">ts</span></a></span><span>
</span><span id="line-59"></span><span> </span><span class="annot"><span class="annottext">(MuxSDU, Time) -> m (MuxSDU, Time)
forall (m :: * -> *) a. Monad m => a -> m a
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">MuxSDU
</span><a href="#local-6989586621679114473"><span class="hs-identifier hs-var">header</span></a></span><span> </span><span class="hs-special">{</span><span class="annot"><span class="annottext">msBlob :: ByteString
</span><a href="#local-6989586621679114467"><span class="hs-identifier hs-var">Mx.msBlob</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114478"><span class="hs-identifier hs-var">payload</span></a></span><span class="hs-special">}</span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Time
</span><a href="#local-6989586621679114470"><span class="hs-identifier hs-var">ts</span></a></span><span class="hs-special">)</span><span>
</span><a href="#local-6989586621679114616"><span class="hs-identifier hs-var">header</span></a></span><span> </span><span class="hs-special">{</span><span class="annot"><span class="annottext">msBlob :: ByteString
</span><a href="#local-6989586621679114610"><span class="hs-identifier hs-var">Mx.msBlob</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114621"><span class="hs-identifier hs-var">payload</span></a></span><span class="hs-special">}</span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Time
</span><a href="#local-6989586621679114613"><span class="hs-identifier hs-var">ts</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-60"></span><span>
</span><span id="line-61"></span><span> </span><span class="annot"><a href="#local-6989586621679114486"><span class="hs-identifier hs-type">writeMux</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="Network.Mux.Timeout.html#TimeoutFn"><span class="hs-identifier hs-type">Mx.TimeoutFn</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679114496"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Network.Mux.Types.html#MuxSDU"><span class="hs-identifier hs-type">Mx.MuxSDU</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679114496"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><span class="hs-identifier hs-type">Time</span></span><span>
</span><span id="line-62"></span><span> </span><span id="local-6989586621679114486"><span class="annot"><span class="annottext">writeMux :: TimeoutFn m -> MuxSDU -> m Time
</span><a href="#local-6989586621679114486"><span class="hs-identifier hs-var hs-var">writeMux</span></a></span></span><span> </span><span class="annot"><span class="annottext">TimeoutFn m
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621679114466"><span class="annot"><span class="annottext">MuxSDU
</span><a href="#local-6989586621679114466"><span class="hs-identifier hs-var">sdu</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-63"></span><span> </span><span id="local-6989586621679114465"><span class="annot"><span class="annottext">Time
</span><a href="#local-6989586621679114465"><span class="hs-identifier hs-var">ts</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">m Time
</span><span id="line-61"></span><span> </span><span class="annot"><a href="#local-6989586621679114629"><span class="hs-identifier hs-type">writeMux</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="Network.Mux.Timeout.html#TimeoutFn"><span class="hs-identifier hs-type">Mx.TimeoutFn</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679114639"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Network.Mux.Types.html#MuxSDU"><span class="hs-identifier hs-type">Mx.MuxSDU</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679114639"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><span class="hs-identifier hs-type">Time</span></span><span>
</span><span id="line-62"></span><span> </span><span id="local-6989586621679114629"><span class="annot"><span class="annottext">writeMux :: TimeoutFn m -> MuxSDU -> m Time
</span><a href="#local-6989586621679114629"><span class="hs-identifier hs-var hs-var">writeMux</span></a></span></span><span> </span><span class="annot"><span class="annottext">TimeoutFn m
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621679114609"><span class="annot"><span class="annottext">MuxSDU
</span><a href="#local-6989586621679114609"><span class="hs-identifier hs-var">sdu</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-63"></span><span> </span><span id="local-6989586621679114608"><span class="annot"><span class="annottext">Time
</span><a href="#local-6989586621679114608"><span class="hs-identifier hs-var">ts</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">m Time
forall (m :: * -> *). MonadMonotonicTime m => m Time
</span><span class="hs-identifier hs-var">getMonotonicTime</span></span><span>
</span><span id="line-64"></span><span> </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621679114464"><span class="annot"><span class="annottext">ts32 :: Word32
</span><a href="#local-6989586621679114464"><span class="hs-identifier hs-var hs-var">ts32</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Time -> Word32
</span><span id="line-64"></span><span> </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621679114607"><span class="annot"><span class="annottext">ts32 :: Word32
</span><a href="#local-6989586621679114607"><span class="hs-identifier hs-var hs-var">ts32</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Time -> Word32
</span><a href="Network.Mux.Time.html#timestampMicrosecondsLow32Bits"><span class="hs-identifier hs-var">Mx.timestampMicrosecondsLow32Bits</span></a></span><span> </span><span class="annot"><span class="annottext">Time
</span><a href="#local-6989586621679114465"><span class="hs-identifier hs-var">ts</span></a></span><span>
</span><span id="line-65"></span><span> </span><span id="local-6989586621679114462"><span class="annot"><span class="annottext">sdu' :: MuxSDU
</span><a href="#local-6989586621679114462"><span class="hs-identifier hs-var hs-var">sdu'</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">MuxSDU -> RemoteClockModel -> MuxSDU
</span><a href="#local-6989586621679114608"><span class="hs-identifier hs-var">ts</span></a></span><span>
</span><span id="line-65"></span><span> </span><span id="local-6989586621679114605"><span class="annot"><span class="annottext">sdu' :: MuxSDU
</span><a href="#local-6989586621679114605"><span class="hs-identifier hs-var hs-var">sdu'</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">MuxSDU -> RemoteClockModel -> MuxSDU
</span><a href="Network.Mux.Types.html#setTimestamp"><span class="hs-identifier hs-var">Mx.setTimestamp</span></a></span><span> </span><span class="annot"><span class="annottext">MuxSDU
</span><a href="#local-6989586621679114466"><span class="hs-identifier hs-var">sdu</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Word32 -> RemoteClockModel
</span><a href="#local-6989586621679114609"><span class="hs-identifier hs-var">sdu</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Word32 -> RemoteClockModel
</span><a href="Network.Mux.Types.html#RemoteClockModel"><span class="hs-identifier hs-var">Mx.RemoteClockModel</span></a></span><span> </span><span class="annot"><span class="annottext">Word32
</span><a href="#local-6989586621679114464"><span class="hs-identifier hs-var">ts32</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-66"></span><span> </span><span id="local-6989586621679114459"><span class="annot"><span class="annottext">buf :: ByteString
</span><a href="#local-6989586621679114459"><span class="hs-identifier hs-var hs-var">buf</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">MuxSDU -> ByteString
</span><a href="#local-6989586621679114607"><span class="hs-identifier hs-var">ts32</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-66"></span><span> </span><span id="local-6989586621679114602"><span class="annot"><span class="annottext">buf :: ByteString
</span><a href="#local-6989586621679114602"><span class="hs-identifier hs-var hs-var">buf</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">MuxSDU -> ByteString
</span><a href="Network.Mux.Codec.html#encodeMuxSDU"><span class="hs-identifier hs-var">Mx.encodeMuxSDU</span></a></span><span> </span><span class="annot"><span class="annottext">MuxSDU
</span><a href="#local-6989586621679114462"><span class="hs-identifier hs-var">sdu'</span></a></span><span>
</span><span id="line-50"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="hs-identifier hs-type">Socket.Socket</span></span><span>
</span><span id="line-51"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Network.Mux.Types.html#MuxBearer"><span class="hs-identifier hs-type">MuxBearer</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/ghc-prim-0.6.1/src"><span class="hs-identifier hs-type">IO</span></a></span><span>
</span><span id="line-52"></span><span id="socketAsMuxBearer"><span class="annot"><span class="annottext">socketAsMuxBearer :: SDUSize -> DiffTime -> Tracer IO MuxTrace -> Socket -> MuxBearer IO
</span><a href="Network.Mux.Bearer.Socket.html#socketAsMuxBearer"><span class="hs-identifier hs-var hs-var">socketAsMuxBearer</span></a></span></span><span> </span><span id="local-6989586621679114402"><span class="annot"><span class="annottext">SDUSize
</span><a href="#local-6989586621679114402"><span class="hs-identifier hs-var">sduSize</span></a></span></span><span> </span><span id="local-6989586621679114401"><span class="annot"><span class="annottext">DiffTime
</span><a href="#local-6989586621679114401"><span class="hs-identifier hs-var">sduTimeout</span></a></span></span><span> </span><span id="local-6989586621679114400"><span class="annot"><span class="annottext">Tracer IO MuxTrace
</span><a href="#local-6989586621679114400"><span class="hs-identifier hs-var">tracer</span></a></span></span><span> </span><span id="local-6989586621679114399"><span class="annot"><span class="annottext">Socket
</span><a href="#local-6989586621679114399"><span class="hs-identifier hs-var">sd</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><a href="Network.Mux.Bearer.Socket.html#socketAsMuxBearer"><span class="hs-identifier hs-var hs-var">socketAsMuxBearer</span></a></span></span><span> </span><span id="local-6989586621679114545"><span class="annot"><span class="annottext">SDUSize
</span><a href="#local-6989586621679114545"><span class="hs-identifier hs-var">sduSize</span></a></span></span><span> </span><span id="local-6989586621679114544"><span class="annot"><span class="annottext">DiffTime
</span><a href="#local-6989586621679114544"><span class="hs-identifier hs-var">sduTimeout</span></a></span></span><span> </span><span id="local-6989586621679114543"><span class="annot"><span class="annottext">Tracer IO MuxTrace
</span><a href="#local-6989586621679114543"><span class="hs-identifier hs-var">tracer</span></a></span></span><span> </span><span id="local-6989586621679114542"><span class="annot"><span class="annottext">Socket
</span><a href="#local-6989586621679114542"><span class="hs-identifier hs-var">sd</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-53"></span><span> </span><span class="annot"><span class="annottext">MuxBearer :: forall (m :: * -> *).
(TimeoutFn m -> MuxSDU -> m Time)
-> (TimeoutFn m -> m (MuxSDU, Time)) -> SDUSize -> MuxBearer m
</span><a href="Network.Mux.Types.html#MuxBearer"><span class="hs-identifier hs-type">Mx.MuxBearer</span></a></span><span> </span><span class="hs-special">{</span><span>
</span><span id="line-54"></span><span> </span><span class="annot"><span class="annottext">read :: TimeoutFn IO -> IO (MuxSDU, Time)
</span><a href="Network.Mux.Types.html#read"><span class="hs-identifier hs-var">Mx.read</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TimeoutFn IO -> IO (MuxSDU, Time)
</span><a href="#local-6989586621679114396"><span class="hs-identifier hs-var">readSocket</span></a></span><span class="hs-special">,</span><span>
</span><a href="#local-6989586621679114539"><span class="hs-identifier hs-var">readSocket</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-55"></span><span> </span><span class="annot"><span class="annottext">write :: TimeoutFn IO -> MuxSDU -> IO Time
</span><a href="Network.Mux.Types.html#write"><span class="hs-identifier hs-var">Mx.write</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TimeoutFn IO -> MuxSDU -> IO Time
</span><a href="#local-6989586621679114394"><span class="hs-identifier hs-var">writeSocket</span></a></span><span class="hs-special">,</span><span>
</span><a href="#local-6989586621679114537"><span class="hs-identifier hs-var">writeSocket</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-56"></span><span> </span><span class="annot"><span class="annottext">sduSize :: SDUSize
</span><a href="Network.Mux.Types.html#sduSize"><span class="hs-identifier hs-var">Mx.sduSize</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">SDUSize
</span><a href="#local-6989586621679114402"><span class="hs-identifier hs-var">sduSize</span></a></span><span>
</span><a href="#local-6989586621679114545"><span class="hs-identifier hs-var">sduSize</span></a></span><span>
</span><span id="line-57"></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-58"></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-59"></span><span> </span><span id="local-6989586621679114392"><span class="annot"><span class="annottext">hdrLenght :: Int64
</span><a href="#local-6989586621679114392"><span class="hs-identifier hs-var hs-var">hdrLenght</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Int64
</span><span id="line-59"></span><span> </span><span id="local-6989586621679114535"><span class="annot"><span class="annottext">hdrLenght :: Int64
</span><a href="#local-6989586621679114535"><span class="hs-identifier hs-var hs-var">hdrLenght</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Int64
</span><span class="hs-number">8</span></span><span>
</span><span id="line-60"></span><span>
</span><span id="line-61"></span><span> </span><span class="annot"><a href="#local-6989586621679114396"><span class="hs-identifier hs-type">readSocket</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="Network.Mux.Timeout.html#TimeoutFn"><span class="hs-identifier hs-type">Mx.TimeoutFn</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/ghc-prim-0.6.1/src"><span class="hs-identifier hs-type">IO</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/ghc-prim-0.6.1/src"><span class="hs-identifier hs-type">IO</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Types.html#MuxSDU"><span class="hs-identifier hs-type">Mx.MuxSDU</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Time</span></span><span class="hs-special">)</span><span>
</span><span id="line-62"></span><span> </span><span id="local-6989586621679114396"><span class="annot"><span class="annottext">readSocket :: TimeoutFn IO -> IO (MuxSDU, Time)
</span><a href="#local-6989586621679114396"><span class="hs-identifier hs-var hs-var">readSocket</span></a></span></span><span> </span><span id="local-6989586621679114391"><span class="annot"><span class="annottext">TimeoutFn IO
</span><a href="#local-6989586621679114391"><span class="hs-identifier hs-var">timeout</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-61"></span><span> </span><span class="annot"><a href="#local-6989586621679114539"><span class="hs-identifier hs-type">readSocket</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="Network.Mux.Timeout.html#TimeoutFn"><span class="hs-identifier hs-type">Mx.TimeoutFn</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/ghc-prim-0.6.1/src"><span class="hs-identifier hs-type">IO</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/ghc-prim-0.6.1/src"><span class="hs-identifier hs-type">IO</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Types.html#MuxSDU"><span class="hs-identifier hs-type">Mx.MuxSDU</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Time</span></span><span class="hs-special">)</span><span>
</span><span id="line-62"></span><span> </span><span id="local-6989586621679114539"><span class="annot"><span class="annottext">readSocket :: TimeoutFn IO -> IO (MuxSDU, Time)
</span><a href="#local-6989586621679114539"><span class="hs-identifier hs-var hs-var">readSocket</span></a></span></span><span> </span><span id="local-6989586621679114534"><span class="annot"><span class="annottext">TimeoutFn IO
</span><a href="#local-6989586621679114534"><span class="hs-identifier hs-var">timeout</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-63"></span><span> </span><span class="annot"><span class="annottext">Tracer IO MuxTrace -> MuxTrace -> IO ()
forall (m :: * -> *) a. Tracer m a -> a -> m ()
</span><span class="hs-identifier hs-var">traceWith</span></span><span> </span><span class="annot"><span class="annottext">Tracer IO MuxTrace
</span><a href="#local-6989586621679114400"><span class="hs-identifier hs-var">tracer</span></a></span><span> </span><span class="annot"><span class="annottext">(MuxTrace -> IO ()) -> MuxTrace -> IO ()
</span><a href="#local-6989586621679114543"><span class="hs-identifier hs-var">tracer</span></a></span><span> </span><span class="annot"><span class="annottext">(MuxTrace -> IO ()) -> MuxTrace -> IO ()
forall a b. (a -> b) -> a -> b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">MuxTrace
</span><a href="Network.Mux.Trace.html#MuxTraceRecvHeaderStart"><span class="hs-identifier hs-var">Mx.MuxTraceRecvHeaderStart</span></a></span><span>
</span><span id="line-64"></span><span>
</span><span id="line-65"></span><span> </span><span class="hs-comment">-- Wait for the first part of the header without any timeout</span><span>
</span><span id="line-66"></span><span> </span><span id="local-6989586621679114388"><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114388"><span class="hs-identifier hs-var">h0</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">Bool -> Int64 -> IO ByteString
</span><a href="#local-6989586621679114387"><span class="hs-identifier hs-var">recvAtMost</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span id="line-66"></span><span> </span><span id="local-6989586621679114531"><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114531"><span class="hs-identifier hs-var">h0</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">Bool -> Int64 -> IO ByteString
</span><a href="#local-6989586621679114530"><span class="hs-identifier hs-var">recvAtMost</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/ghc-prim-0.6.1/src"><span class="hs-identifier hs-var">True</span></a></span><span> </span><span class="annot"><span class="annottext">Int64
</span><a href="#local-6989586621679114392"><span class="hs-identifier hs-var">hdrLenght</span></a></span><span>
</span><a href="#local-6989586621679114535"><span class="hs-identifier hs-var">hdrLenght</span></a></span><span>
</span><span id="line-67"></span><span>
</span><span id="line-68"></span><span> </span><span class="hs-comment">-- Optionally wait at most sduTimeout seconds for the complete SDU.</span><span>
</span><span id="line-69"></span><span> </span><span id="local-6989586621679114386"><span class="annot"><span class="annottext">Maybe (MuxSDU, Time)
</span><a href="#local-6989586621679114386"><span class="hs-identifier hs-var">r_m</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">DiffTime -> IO (MuxSDU, Time) -> IO (Maybe (MuxSDU, Time))
</span><span id="line-69"></span><span> </span><span id="local-6989586621679114529"><span class="annot"><span class="annottext">Maybe (MuxSDU, Time)
</span><a href="#local-6989586621679114529"><span class="hs-identifier hs-var">r_m</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">DiffTime -> IO (MuxSDU, Time) -> IO (Maybe (MuxSDU, Time))
TimeoutFn IO
</span><a href="#local-6989586621679114391"><span class="hs-identifier hs-var">timeout</span></a></span><span> </span><span class="annot"><span class="annottext">DiffTime
</span><a href="#local-6989586621679114401"><span class="hs-identifier hs-var">sduTimeout</span></a></span><span> </span><span class="annot"><span class="annottext">(IO (MuxSDU, Time) -> IO (Maybe (MuxSDU, Time)))
</span><a href="#local-6989586621679114534"><span class="hs-identifier hs-var">timeout</span></a></span><span> </span><span class="annot"><span class="annottext">DiffTime
</span><a href="#local-6989586621679114544"><span class="hs-identifier hs-var">sduTimeout</span></a></span><span> </span><span class="annot"><span class="annottext">(IO (MuxSDU, Time) -> IO (Maybe (MuxSDU, Time)))
-> IO (MuxSDU, Time) -> IO (Maybe (MuxSDU, Time))
forall a b. (a -> b) -> a -> b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">ByteString -> IO (MuxSDU, Time)
</span><a href="#local-6989586621679114385"><span class="hs-identifier hs-var">recvRem</span></a></span><span> </span><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114388"><span class="hs-identifier hs-var">h0</span></a></span><span>
</span><a href="#local-6989586621679114528"><span class="hs-identifier hs-var">recvRem</span></a></span><span> </span><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114531"><span class="hs-identifier hs-var">h0</span></a></span><span>
</span><span id="line-70"></span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Maybe (MuxSDU, Time)
</span><a href="#local-6989586621679114386"><span class="hs-identifier hs-var">r_m</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><a href="#local-6989586621679114529"><span class="hs-identifier hs-var">r_m</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-71"></span><span> </span><span class="annot"><span class="annottext">Maybe (MuxSDU, Time)
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-var">Nothing</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-72"></span><span> </span><span class="annot"><span class="annottext">Tracer IO MuxTrace -> MuxTrace -> IO ()
forall (m :: * -> *) a. Tracer m a -> a -> m ()
</span><span class="hs-identifier hs-var">traceWith</span></span><span> </span><span class="annot"><span class="annottext">Tracer IO MuxTrace
</span><a href="#local-6989586621679114400"><span class="hs-identifier hs-var">tracer</span></a></span><span> </span><span class="annot"><span class="annottext">(MuxTrace -> IO ()) -> MuxTrace -> IO ()
</span><a href="#local-6989586621679114543"><span class="hs-identifier hs-var">tracer</span></a></span><span> </span><span class="annot"><span class="annottext">(MuxTrace -> IO ()) -> MuxTrace -> IO ()
forall a b. (a -> b) -> a -> b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">MuxTrace
</span><a href="Network.Mux.Trace.html#MuxTraceSDUReadTimeoutException"><span class="hs-identifier hs-var">Mx.MuxTraceSDUReadTimeoutException</span></a></span><span>
</span><a href="Network.Mux.Trace.html#MuxError"><span class="hs-identifier hs-var">Mx.MuxError</span></a></span><span> </span><span class="annot"><span class="annottext">MuxErrorType
</span><a href="Network.Mux.Trace.html#MuxSDUReadTimeout"><span class="hs-identifier hs-var">Mx.MuxSDUReadTimeout</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">"Mux SDU Timeout"</span></span><span>
</span><span id="line-74"></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Just</span></a></span><span> </span><span id="local-6989586621679114380"><span class="annot"><span class="annottext">(MuxSDU, Time)
</span><a href="#local-6989586621679114380"><span class="hs-identifier hs-var">r</span></a></span></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="annottext">(MuxSDU, Time) -> IO (MuxSDU, Time)
</span><span id="line-74"></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Just</span></a></span><span> </span><span id="local-6989586621679114523"><span class="annot"><span class="annottext">(MuxSDU, Time)
</span><a href="#local-6989586621679114523"><span class="hs-identifier hs-var">r</span></a></span></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="annottext">(MuxSDU, Time) -> IO (MuxSDU, Time)
forall (m :: * -> *) a. Monad m => a -> m a
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">(MuxSDU, Time)
</span><a href="#local-6989586621679114380"><span class="hs-identifier hs-var">r</span></a></span><span>
</span><a href="#local-6989586621679114523"><span class="hs-identifier hs-var">r</span></a></span><span>
</span><span id="line-75"></span><span>
</span><span id="line-76"></span><span> </span><span class="annot"><a href="#local-6989586621679114385"><span class="hs-identifier hs-type">recvRem</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-type">BL.ByteString</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/ghc-prim-0.6.1/src"><span class="hs-identifier hs-type">IO</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Types.html#MuxSDU"><span class="hs-identifier hs-type">Mx.MuxSDU</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Time</span></span><span class="hs-special">)</span><span>
</span><span id="line-77"></span><span> </span><span id="local-6989586621679114385"><span class="annot"><span class="annottext">recvRem :: ByteString -> IO (MuxSDU, Time)
</span><a href="#local-6989586621679114385"><span class="hs-identifier hs-var hs-var">recvRem</span></a></span></span><span> </span><span class="hs-glyph">!</span><span id="local-6989586621679114379"><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114379"><span class="hs-identifier hs-var">h0</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-78"></span><span> </span><span id="local-6989586621679114378"><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114378"><span class="hs-identifier hs-var">hbuf</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">Int64 -> [ByteString] -> IO ByteString
</span><a href="#local-6989586621679114377"><span class="hs-identifier hs-var">recvLen'</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int64
</span><a href="#local-6989586621679114392"><span class="hs-identifier hs-var">hdrLenght</span></a></span><span> </span><span class="annot"><span class="annottext">Int64 -> Int64 -> Int64
</span><span id="line-76"></span><span> </span><span class="annot"><a href="#local-6989586621679114528"><span class="hs-identifier hs-type">recvRem</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-type">BL.ByteString</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/ghc-prim-0.6.1/src"><span class="hs-identifier hs-type">IO</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Types.html#MuxSDU"><span class="hs-identifier hs-type">Mx.MuxSDU</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Time</span></span><span class="hs-special">)</span><span>
</span><span id="line-77"></span><span> </span><span id="local-6989586621679114528"><span class="annot"><span class="annottext">recvRem :: ByteString -> IO (MuxSDU, Time)
</span><a href="#local-6989586621679114528"><span class="hs-identifier hs-var hs-var">recvRem</span></a></span></span><span> </span><span class="hs-glyph">!</span><span id="local-6989586621679114522"><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114522"><span class="hs-identifier hs-var">h0</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-78"></span><span> </span><span id="local-6989586621679114521"><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114521"><span class="hs-identifier hs-var">hbuf</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">Int64 -> [ByteString] -> IO ByteString
</span><a href="#local-6989586621679114520"><span class="hs-identifier hs-var">recvLen'</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int64
</span><a href="#local-6989586621679114535"><span class="hs-identifier hs-var">hdrLenght</span></a></span><span> </span><span class="annot"><span class="annottext">Int64 -> Int64 -> Int64
forall a. Num a => a -> a -> a
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-glyph hs-var">-</span></a></span><span> </span><span class="annot"><span class="annottext">ByteString -> Int64
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-var">BL.length</span></a></span><span> </span><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114379"><span class="hs-identifier hs-var">h0</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114379"><span class="hs-identifier hs-var">h0</span></a></span><span class="hs-special">]</span><span>
</span><a href="#local-6989586621679114522"><span class="hs-identifier hs-var">h0</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114522"><span class="hs-identifier hs-var">h0</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-79"></span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">ByteString -> Either MuxError MuxSDU
</span><a href="Network.Mux.Codec.html#decodeMuxSDU"><span class="hs-identifier hs-var">Mx.decodeMuxSDU</span></a></span><span> </span><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114378"><span class="hs-identifier hs-var">hbuf</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-80"></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Left</span></a></span><span> </span><span id="local-6989586621679114374"><span class="annot"><span class="annottext">MuxError
</span><a href="#local-6989586621679114374"><span class="hs-identifier hs-var">e</span></a></span></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="annottext">MuxError -> IO (MuxSDU, Time)
</span><a href="#local-6989586621679114521"><span class="hs-identifier hs-var">hbuf</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-80"></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Left</span></a></span><span> </span><span id="local-6989586621679114517"><span class="annot"><span class="annottext">MuxError
</span><a href="#local-6989586621679114517"><span class="hs-identifier hs-var">e</span></a></span></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="annottext">MuxError -> IO (MuxSDU, Time)
forall (m :: * -> *) e a. (MonadThrow m, Exception e) => e -> m a
</span><span class="hs-identifier hs-var">throwIO</span></span><span> </span><span class="annot"><span class="annottext">MuxError
</span><a href="#local-6989586621679114374"><span class="hs-identifier hs-var">e</span></a></span><span>
</span><span id="line-81"></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Right</span></a></span><span> </span><span id="local-6989586621679114373"><span class="annot"><span class="annottext">header :: MuxSDU
</span><a href="#local-6989586621679114373"><span class="hs-identifier hs-var">header</span></a></span></span><span class="hs-glyph">@</span><span class="annot"><a href="Network.Mux.Types.html#MuxSDU"><span class="hs-identifier hs-type">Mx.MuxSDU</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span id="local-6989586621679114371"><span class="annot"><span class="annottext">MuxSDUHeader
</span><a href="#local-6989586621679114517"><span class="hs-identifier hs-var">e</span></a></span><span>
</span><span id="line-81"></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Right</span></a></span><span> </span><span id="local-6989586621679114516"><span class="annot"><span class="annottext">header :: MuxSDU
</span><a href="#local-6989586621679114516"><span class="hs-identifier hs-var">header</span></a></span></span><span class="hs-glyph">@</span><span class="annot"><a href="Network.Mux.Types.html#MuxSDU"><span class="hs-identifier hs-type">Mx.MuxSDU</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span id="local-6989586621679114514"><span class="annot"><span class="annottext">MuxSDUHeader
msHeader :: MuxSDU -> MuxSDUHeader
msHeader :: MuxSDUHeader
</span><a href="Network.Mux.Types.html#msHeader"><span class="hs-identifier hs-var hs-var">Mx.msHeader</span></a></span></span><span> </span><span class="hs-special">}</span><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-82"></span><span> </span><span class="annot"><span class="annottext">Tracer IO MuxTrace -> MuxTrace -> IO ()
forall (m :: * -> *) a. Tracer m a -> a -> m ()
</span><span class="hs-identifier hs-var">traceWith</span></span><span> </span><span class="annot"><span class="annottext">Tracer IO MuxTrace
</span><a href="#local-6989586621679114400"><span class="hs-identifier hs-var">tracer</span></a></span><span> </span><span class="annot"><span class="annottext">(MuxTrace -> IO ()) -> MuxTrace -> IO ()
</span><a href="#local-6989586621679114543"><span class="hs-identifier hs-var">tracer</span></a></span><span> </span><span class="annot"><span class="annottext">(MuxTrace -> IO ()) -> MuxTrace -> IO ()
forall a b. (a -> b) -> a -> b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">MuxSDUHeader -> MuxTrace
</span><a href="Network.Mux.Trace.html#MuxTraceRecvHeaderEnd"><span class="hs-identifier hs-var">Mx.MuxTraceRecvHeaderEnd</span></a></span><span> </span><span class="annot"><span class="annottext">MuxSDUHeader
</span><a href="#local-6989586621679114371"><span class="hs-identifier hs-var">msHeader</span></a></span><span>
</span><span id="line-83"></span><span> </span><span class="hs-glyph">!</span><span id="local-6989586621679114368"><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114368"><span class="hs-identifier hs-var">blob</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">Int64 -> [ByteString] -> IO ByteString
</span><a href="#local-6989586621679114377"><span class="hs-identifier hs-var">recvLen'</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Word16 -> Int64
</span><a href="#local-6989586621679114514"><span class="hs-identifier hs-var">msHeader</span></a></span><span>
</span><span id="line-83"></span><span> </span><span class="hs-glyph">!</span><span id="local-6989586621679114511"><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114511"><span class="hs-identifier hs-var">blob</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">Int64 -> [ByteString] -> IO ByteString
</span><a href="#local-6989586621679114520"><span class="hs-identifier hs-var">recvLen'</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Word16 -> Int64
forall a b. (Integral a, Num b) => a -> b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-var">fromIntegral</span></a></span><span> </span><span class="annot"><span class="annottext">(Word16 -> Int64) -> Word16 -> Int64
forall a b. (a -> b) -> a -> b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">MuxSDUHeader -> Word16
</span><a href="Network.Mux.Types.html#mhLength"><span class="hs-identifier hs-var hs-var">Mx.mhLength</span></a></span><span> </span><span class="annot"><span class="annottext">MuxSDUHeader
</span><a href="#local-6989586621679114371"><span class="hs-identifier hs-var">msHeader</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
</span><a href="#local-6989586621679114514"><span class="hs-identifier hs-var">msHeader</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
</span><span id="line-84"></span><span>
</span><span id="line-85"></span><span> </span><span class="hs-glyph">!</span><span id="local-6989586621679114366"><span class="annot"><span class="annottext">Time
</span><a href="#local-6989586621679114366"><span class="hs-identifier hs-var">ts</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">IO Time
</span><span id="line-85"></span><span> </span><span class="hs-glyph">!</span><span id="local-6989586621679114509"><span class="annot"><span class="annottext">Time
</span><a href="#local-6989586621679114509"><span class="hs-identifier hs-var">ts</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">IO Time
forall (m :: * -> *). MonadMonotonicTime m => m Time
</span><span class="hs-identifier hs-var">getMonotonicTime</span></span><span>
</span><span id="line-86"></span><span> </span><span class="hs-keyword">let</span><span> </span><span class="hs-glyph">!</span><span id="local-6989586621679114364"><span class="annot"><span class="annottext">header' :: MuxSDU
</span><a href="#local-6989586621679114364"><span class="hs-identifier hs-var hs-var">header'</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">MuxSDU
</span><a href="#local-6989586621679114373"><span class="hs-identifier hs-var">header</span></a></span><span> </span><span class="hs-special">{</span><span class="annot"><span class="annottext">msBlob :: ByteString
</span><a href="#local-6989586621679114363"><span class="hs-identifier hs-var">Mx.msBlob</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114368"><span class="hs-identifier hs-var">blob</span></a></span><span class="hs-special">}</span><span>
</span><span id="line-86"></span><span> </span><span class="hs-keyword">let</span><span> </span><span class="hs-glyph">!</span><span id="local-6989586621679114507"><span class="annot"><span class="annottext">header' :: MuxSDU
</span><a href="#local-6989586621679114507"><span class="hs-identifier hs-var hs-var">header'</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">MuxSDU
</span><a href="#local-6989586621679114516"><span class="hs-identifier hs-var">header</span></a></span><span> </span><span class="hs-special">{</span><span class="annot"><span class="annottext">msBlob :: ByteString
</span><a href="#local-6989586621679114506"><span class="hs-identifier hs-var">Mx.msBlob</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114511"><span class="hs-identifier hs-var">blob</span></a></span><span class="hs-special">}</span><span>
</span><span id="line-87"></span><span> </span><span class="annot"><span class="annottext">Tracer IO MuxTrace -> MuxTrace -> IO ()
forall (m :: * -> *) a. Tracer m a -> a -> m ()
</span><span class="hs-identifier hs-var">traceWith</span></span><span> </span><span class="annot"><span class="annottext">Tracer IO MuxTrace
</span><a href="#local-6989586621679114400"><span class="hs-identifier hs-var">tracer</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">MuxSDUHeader -> Time -> MuxTrace
</span><a href="#local-6989586621679114543"><span class="hs-identifier hs-var">tracer</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">MuxSDUHeader -> Time -> MuxTrace
</span><a href="Network.Mux.Trace.html#MuxTraceRecvDeltaQObservation"><span class="hs-identifier hs-var">Mx.MuxTraceRecvDeltaQObservation</span></a></span><span> </span><span class="annot"><span class="annottext">MuxSDUHeader
</span><a href="#local-6989586621679114371"><span class="hs-identifier hs-var">msHeader</span></a></span><span> </span><span class="annot"><span class="annottext">Time
</span><a href="#local-6989586621679114366"><span class="hs-identifier hs-var">ts</span></a></span><span class="hs-special">)</span><span>
</span><a href="#local-6989586621679114514"><span class="hs-identifier hs-var">msHeader</span></a></span><span> </span><span class="annot"><span class="annottext">Time
</span><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Network.Mux.Bearer.NamedPipe</span><span class="hs-cpp">
#endif
</span><span>
</span><span id="line-40"></span><span class="hs-keyword">newtype</span><span> </span><span id="MakeBearer"><span class="annot"><a href="Network.Mux.Bearer.html#MakeBearer"><span class="hs-identifier hs-var">MakeBearer</span></a></span></span><span> </span><span id="local-6989586621679114944"><span class="annot"><a href="#local-6989586621679114944"><span class="hs-identifier hs-type">m</span></a></span></span><span> </span><span id="local-6989586621679114943"><span class="annot"><a href="#local-6989586621679114943"><span class="hs-identifier hs-type">fd</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="MakeBearer"><span class="annot"><a href="Network.Mux.Bearer.html#MakeBearer"><span class="hs-identifier hs-var">MakeBearer</span></a></span></span><span> </span><span class="hs-special">{</span><span>
</span><span id="line-40"></span><span class="hs-keyword">newtype</span><span> </span><span id="MakeBearer"><span class="annot"><a href="Network.Mux.Bearer.html#MakeBearer"><span class="hs-identifier hs-var">MakeBearer</span></a></span></span><span> </span><span id="local-6989586621679115087"><span class="annot"><a href="#local-6989586621679115087"><span class="hs-identifier hs-type">m</span></a></span></span><span> </span><span id="local-6989586621679115086"><span class="annot"><a href="#local-6989586621679115086"><span class="hs-identifier hs-type">fd</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="MakeBearer"><span class="annot"><a href="Network.Mux.Bearer.html#MakeBearer"><span class="hs-identifier hs-var">MakeBearer</span></a></span></span><span> </span><span class="hs-special">{</span><span>
</span><span id="line-41"></span><span> </span><span id="getBearer"><span class="annot"><span class="annottext">MakeBearer m fd
-> DiffTime -> Tracer m MuxTrace -> fd -> m (MuxBearer m)
</span><a href="Network.Mux.Bearer.html#getBearer"><span class="hs-identifier hs-var hs-var">getBearer</span></a></span></span><span>
</span><span id="line-42"></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/time-1.9.3/src"><span class="hs-identifier hs-type">DiffTime</span></a></span><span>
</span><span id="line-43"></span><span> </span><span class="hs-comment">-- timeout for reading an SDUMux segment, if negative no</span><span>
</span><span id="line-44"></span><span> </span><span class="hs-comment">-- timeout is applied.</span><span>
</span><span id="line-45"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="hs-identifier hs-type">Tracer</span></span><span> </span><span class="annot"><a href="#local-6989586621679114944"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="Network.Mux.Trace.html#MuxTrace"><span class="hs-identifier hs-type">MuxTrace</span></a></span><span>
</span><span id="line-45"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="hs-identifier hs-type">Tracer</span></span><span> </span><span class="annot"><a href="#local-6989586621679115087"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="Network.Mux.Trace.html#MuxTrace"><span class="hs-identifier hs-type">MuxTrace</span></a></span><span>
</span><span id="line-46"></span><span> </span><span class="hs-comment">-- tracer</span><span>
</span><span id="line-47"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679114943"><span class="hs-identifier hs-type">fd</span></a></span><span>
</span><span id="line-47"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679115086"><span class="hs-identifier hs-type">fd</span></a></span><span>
</span><span id="line-48"></span><span> </span><span class="hs-comment">-- file descriptor</span><span>
</span><span id="line-49"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679114944"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Types.html#MuxBearer"><span class="hs-identifier hs-type">MuxBearer</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679114944"><span class="hs-identifier hs-type">m</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-49"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679115087"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Types.html#MuxBearer"><span class="hs-identifier hs-type">MuxBearer</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115087"><span class="hs-identifier hs-type">m</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-50"></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-51"></span><span>
</span><span id="line-52"></span><span>
</span><span id="line-53"></span><span id="local-6989586621679114938"><span id="local-6989586621679114939"><span class="annot"><a href="Network.Mux.Bearer.html#pureBearer"><span class="hs-identifier hs-type">pureBearer</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Applicative</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679114939"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-54"></span><span> </span><span class="hs-glyph">=></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/time-1.9.3/src"><span class="hs-identifier hs-type">DiffTime</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="hs-identifier hs-type">Tracer</span></span><span> </span><span class="annot"><a href="#local-6989586621679114939"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="Network.Mux.Trace.html#MuxTrace"><span class="hs-identifier hs-type">MuxTrace</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679114938"><span class="hs-identifier hs-type">fd</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Network.Mux.Types.html#MuxBearer"><span class="hs-identifier hs-type">MuxBearer</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679114939"><span class="hs-identifier hs-type">m</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-55"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/time-1.9.3/src"><span class="hs-identifier hs-type">DiffTime</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="hs-identifier hs-type">Tracer</span></span><span> </span><span class="annot"><a href="#local-6989586621679114939"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="Network.Mux.Trace.html#MuxTrace"><span class="hs-identifier hs-type">MuxTrace</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679114938"><span class="hs-identifier hs-type">fd</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679114939"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Types.html#MuxBearer"><span class="hs-identifier hs-type">MuxBearer</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679114939"><span class="hs-identifier hs-type">m</span></a></span><span class="hs-special">)</span></span></span><span>
</span><span id="line-53"></span><span id="local-6989586621679115081"><span id="local-6989586621679115082"><span class="annot"><a href="Network.Mux.Bearer.html#pureBearer"><span class="hs-identifier hs-type">pureBearer</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Applicative</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115082"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-54"></span><span> </span><span class="hs-glyph">=></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/time-1.9.3/src"><span class="hs-identifier hs-type">DiffTime</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="hs-identifier hs-type">Tracer</span></span><span> </span><span class="annot"><a href="#local-6989586621679115082"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="Network.Mux.Trace.html#MuxTrace"><span class="hs-identifier hs-type">MuxTrace</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679115081"><span class="hs-identifier hs-type">fd</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Network.Mux.Types.html#MuxBearer"><span class="hs-identifier hs-type">MuxBearer</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115082"><span class="hs-identifier hs-type">m</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-55"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/time-1.9.3/src"><span class="hs-identifier hs-type">DiffTime</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="hs-identifier hs-type">Tracer</span></span><span> </span><span class="annot"><a href="#local-6989586621679115082"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="Network.Mux.Trace.html#MuxTrace"><span class="hs-identifier hs-type">MuxTrace</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679115081"><span class="hs-identifier hs-type">fd</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679115082"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Types.html#MuxBearer"><span class="hs-identifier hs-type">MuxBearer</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115082"><span class="hs-identifier hs-type">m</span></a></span><span class="hs-special">)</span></span></span><span>
</span><span id="line-56"></span><span id="pureBearer"><span class="annot"><span class="annottext">pureBearer :: (DiffTime -> Tracer m MuxTrace -> fd -> MuxBearer m)
-> DiffTime -> Tracer m MuxTrace -> fd -> m (MuxBearer m)
</span><a href="Network.Mux.Bearer.html#pureBearer"><span class="hs-identifier hs-var hs-var">pureBearer</span></a></span></span><span> </span><span id="local-6989586621679114922"><span class="annot"><span class="annottext">DiffTime -> Tracer m MuxTrace -> fd -> MuxBearer m
</span><a href="#local-6989586621679114922"><span class="hs-identifier hs-var">f</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-glyph">\</span><span id="local-6989586621679114921"><span class="annot"><span class="annottext">DiffTime
</span><a href="#local-6989586621679114921"><span class="hs-identifier hs-var">sduTimeout</span></a></span></span><span> </span><span id="local-6989586621679114920"><span class="annot"><span class="annottext">Tracer m MuxTrace
</span><a href="#local-6989586621679114920"><span class="hs-identifier hs-var">tr</span></a></span></span><span> </span><span id="local-6989586621679114919"><span class="annot"><span class="annottext">fd
</span><a href="#local-6989586621679114919"><span class="hs-identifier hs-var">fd</span></a></span></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="annottext">MuxBearer m -> m (MuxBearer m)
</span><a href="Network.Mux.Bearer.html#pureBearer"><span class="hs-identifier hs-var hs-var">pureBearer</span></a></span></span><span> </span><span id="local-6989586621679115065"><span class="annot"><span class="annottext">DiffTime -> Tracer m MuxTrace -> fd -> MuxBearer m
</span><a href="#local-6989586621679115065"><span class="hs-identifier hs-var">f</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-glyph">\</span><span id="local-6989586621679115064"><span class="annot"><span class="annottext">DiffTime
</span><a href="#local-6989586621679115064"><span class="hs-identifier hs-var">sduTimeout</span></a></span></span><span> </span><span id="local-6989586621679115063"><span class="annot"><span class="annottext">Tracer m MuxTrace
</span><a href="#local-6989586621679115063"><span class="hs-identifier hs-var">tr</span></a></span></span><span> </span><span id="local-6989586621679115062"><span class="annot"><span class="annottext">fd
</span><a href="#local-6989586621679115062"><span class="hs-identifier hs-var">fd</span></a></span></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="annottext">MuxBearer m -> m (MuxBearer m)
forall (f :: * -> *) a. Applicative f => a -> f a
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-var">pure</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">DiffTime -> Tracer m MuxTrace -> fd -> MuxBearer m
</span><a href="#local-6989586621679114922"><span class="hs-identifier hs-var">f</span></a></span><span> </span><span class="annot"><span class="annottext">DiffTime
</span><a href="#local-6989586621679114921"><span class="hs-identifier hs-var">sduTimeout</span></a></span><span> </span><span class="annot"><span class="annottext">Tracer m MuxTrace
</span><a href="#local-6989586621679114920"><span class="hs-identifier hs-var">tr</span></a></span><span> </span><span class="annot"><span class="annottext">fd
</span><a href="#local-6989586621679114919"><span class="hs-identifier hs-var">fd</span></a></span><span class="hs-special">)</span><span>
</span><a href="#local-6989586621679115065"><span class="hs-identifier hs-var">f</span></a></span><span> </span><span class="annot"><span class="annottext">DiffTime
</span><a href="#local-6989586621679115064"><span class="hs-identifier hs-var">sduTimeout</span></a></span><span> </span><span class="annot"><span class="annottext">Tracer m MuxTrace
</span><a href="#local-6989586621679115063"><span class="hs-identifier hs-var">tr</span></a></span><span> </span><span class="annot"><span class="annottext">fd
</span><a href="#local-6989586621679115062"><span class="hs-identifier hs-var">fd</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-57"></span><span>
</span><span id="line-58"></span><span class="annot"><a href="Network.Mux.Bearer.html#makeSocketBearer"><span class="hs-identifier hs-type">makeSocketBearer</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="Network.Mux.Bearer.html#MakeBearer"><span class="hs-identifier hs-type">MakeBearer</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/ghc-prim-0.6.1/src"><span class="hs-identifier hs-type">IO</span></a></span><span> </span><span class="annot"><span class="hs-identifier hs-type">Socket</span></span><span>
</span><span id="line-59"></span><span id="makeSocketBearer"><span class="annot"><span class="annottext">makeSocketBearer :: MakeBearer IO Socket
-> DiffTime -> Tracer m MuxTrace -> fd -> m (MuxBearer m)
</span><a href="Network.Mux.Bearer.html#pureBearer"><span class="hs-identifier hs-var">pureBearer</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">SDUSize -> DiffTime -> Tracer IO MuxTrace -> Socket -> MuxBearer IO
</span><a href="Network.Mux.Bearer.Socket.html#socketAsMuxBearer"><span class="hs-identifier hs-var">socketAsMuxBearer</span></a></span><span> </span><span class="annot"><span class="annottext">SDUSize
</span><a href="#local-6989586621679114917"><span class="hs-identifier hs-var">size</span></a></span><span class="hs-special">)</span><span>
</span><a href="#local-6989586621679115060"><span class="hs-identifier hs-var">size</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-60"></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-61"></span><span> </span><span id="local-6989586621679114917"><span class="annot"><span class="annottext">size :: SDUSize
</span><a href="#local-6989586621679114917"><span class="hs-identifier hs-var hs-var">size</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Word16 -> SDUSize
</span><span id="line-61"></span><span> </span><span id="local-6989586621679115060"><span class="annot"><span class="annottext">size :: SDUSize
</span><a href="#local-6989586621679115060"><span class="hs-identifier hs-var hs-var">size</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Word16 -> SDUSize
</span><a href="Network.Mux.Types.html#SDUSize"><span class="hs-identifier hs-var">SDUSize</span></a></span><span> </span><span class="annot"><span class="annottext">Word16
</span><span class="hs-number">12_288</span></span><span>
</span><span id="line-62"></span><span>
</span><a href="Network.Mux.Bearer.html#pureBearer"><span class="hs-identifier hs-var">pureBearer</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span class="annot"><span class="annottext">DiffTime
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="annottext">SDUSize -> Tracer IO MuxTrace -> PipeChannel -> MuxBearer IO
</span><a href="Network.Mux.Bearer.Pipe.html#pipeAsMuxBearer"><span class="hs-identifier hs-var">pipeAsMuxBearer</span></a></span><span> </span><span class="annot"><span class="annottext">SDUSize
</span><a href="#local-6989586621679114914"><span class="hs-identifier hs-var">size</span></a></span><span class="hs-special">)</span><span>
</span><a href="#local-6989586621679115057"><span class="hs-identifier hs-var">size</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-65"></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-66"></span><span> </span><span id="local-6989586621679114914"><span class="annot"><span class="annottext">size :: SDUSize
</span><a href="#local-6989586621679114914"><span class="hs-identifier hs-var hs-var">size</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Word16 -> SDUSize
</span><span id="line-66"></span><span> </span><span id="local-6989586621679115057"><span class="annot"><span class="annottext">size :: SDUSize
</span><a href="#local-6989586621679115057"><span class="hs-identifier hs-var hs-var">size</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Word16 -> SDUSize
</span><a href="Network.Mux.Types.html#SDUSize"><span class="hs-identifier hs-var">SDUSize</span></a></span><span> </span><span class="annot"><span class="annottext">Word16
</span><span class="hs-number">32_768</span></span><span>
</span><span id="line-67"></span><span>
</span><span id="line-68"></span><span id="local-6989586621679114913"><span class="annot"><a href="Network.Mux.Bearer.html#makeQueueChannelBearer"><span class="hs-identifier hs-type">makeQueueChannelBearer</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadSTM</span></span><span> </span><span class="annot"><a href="#local-6989586621679114913"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-69"></span><span> </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadTime</span></span><span> </span><span class="annot"><a href="#local-6989586621679114913"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-70"></span><span> </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadThrow</span></span><span> </span><span class="annot"><a href="#local-6989586621679114913"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-68"></span><span id="local-6989586621679115056"><span class="annot"><a href="Network.Mux.Bearer.html#makeQueueChannelBearer"><span class="hs-identifier hs-type">makeQueueChannelBearer</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadSTM</span></span><span> </span><span class="annot"><a href="#local-6989586621679115056"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-69"></span><span> </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadTime</span></span><span> </span><span class="annot"><a href="#local-6989586621679115056"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-70"></span><span> </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadThrow</span></span><span> </span><span class="annot"><a href="#local-6989586621679115056"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-71"></span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-72"></span><span> </span><span class="hs-glyph">=></span><span> </span><span class="annot"><a href="Network.Mux.Bearer.html#MakeBearer"><span class="hs-identifier hs-type">MakeBearer</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679114913"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Bearer.Queues.html#QueueChannel"><span class="hs-identifier hs-type">QueueChannel</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679114913"><span class="hs-identifier hs-type">m</span></a></span><span class="hs-special">)</span></span><span>
</span><span id="line-72"></span><span> </span><span class="hs-glyph">=></span><span> </span><span class="annot"><a href="Network.Mux.Bearer.html#MakeBearer"><span class="hs-identifier hs-type">MakeBearer</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115056"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Bearer.Queues.html#QueueChannel"><span class="hs-identifier hs-type">QueueChannel</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115056"><span class="hs-identifier hs-type">m</span></a></span><span class="hs-special">)</span></span><span>
</span><span id="line-73"></span><span id="makeQueueChannelBearer"><span class="annot"><span class="annottext">makeQueueChannelBearer :: MakeBearer m (QueueChannel m)
</span><a href="Network.Mux.Bearer.html#makeQueueChannelBearer"><span class="hs-identifier hs-var hs-var">makeQueueChannelBearer</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(DiffTime
-> Tracer m MuxTrace -> QueueChannel m -> m (MuxBearer m))
(MonadSTM m, MonadTime m, MonadThrow m) =>
SDUSize -> Tracer m MuxTrace -> QueueChannel m -> MuxBearer m
</span><a href="Network.Mux.Bearer.Queues.html#queueChannelAsMuxBearer"><span class="hs-identifier hs-var">queueChannelAsMuxBearer</span></a></span><span> </span><span class="annot"><span class="annottext">SDUSize
</span><a href="#local-6989586621679114911"><span class="hs-identifier hs-var">size</span></a></span><span class="hs-special">)</span><span>
</span><a href="#local-6989586621679115054"><span class="hs-identifier hs-var">size</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-74"></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-75"></span><span> </span><span id="local-6989586621679114911"><span class="annot"><span class="annottext">size :: SDUSize
</span><a href="#local-6989586621679114911"><span class="hs-identifier hs-var hs-var">size</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Word16 -> SDUSize
</span><span id="line-75"></span><span> </span><span id="local-6989586621679115054"><span class="annot"><span class="annottext">size :: SDUSize
</span><a href="#local-6989586621679115054"><span class="hs-identifier hs-var hs-var">size</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Word16 -> SDUSize
</span><a href="Network.Mux.Types.html#SDUSize"><span class="hs-identifier hs-var">SDUSize</span></a></span><span> </span><span class="annot"><span class="annottext">Word16
</span><span class="hs-number">1_280</span></span><span class="hs-cpp">
</span><span id="line-27"></span><span class="hs-comment">--</span><span>
</span><span id="line-28"></span><span class="annot"><a href="Network.Mux.Codec.html#encodeMuxSDU"><span class="hs-identifier hs-type">encodeMuxSDU</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="Network.Mux.Types.html#MuxSDU"><span class="hs-identifier hs-type">MuxSDU</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-type">BL.ByteString</span></a></span><span>
</span><span id="line-29"></span><span id="encodeMuxSDU"><span class="annot"><span class="annottext">encodeMuxSDU :: MuxSDU -> ByteString
</span><a href="Network.Mux.Codec.html#encodeMuxSDU"><span class="hs-identifier hs-var hs-var">encodeMuxSDU</span></a></span></span><span> </span><span id="local-6989586621679114300"><span class="annot"><span class="annottext">MuxSDU
</span><a href="#local-6989586621679114300"><span class="hs-identifier hs-var">sdu</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-30"></span><span> </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621679114299"><span class="annot"><span class="annottext">hdr :: ByteString
</span><a href="#local-6989586621679114299"><span class="hs-identifier hs-var hs-var">hdr</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Put -> ByteString
</span><a href="Network.Mux.Codec.html#encodeMuxSDU"><span class="hs-identifier hs-var hs-var">encodeMuxSDU</span></a></span></span><span> </span><span id="local-6989586621679114443"><span class="annot"><span class="annottext">MuxSDU
</span><a href="#local-6989586621679114443"><span class="hs-identifier hs-var">sdu</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-30"></span><span> </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621679114442"><span class="annot"><span class="annottext">hdr :: ByteString
</span><a href="#local-6989586621679114442"><span class="hs-identifier hs-var hs-var">hdr</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Put -> ByteString
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/binary-0.8.8.0/src"><span class="hs-identifier hs-var">Bin.runPut</span></a></span><span> </span><span class="annot"><span class="annottext">Put
</span><a href="#local-6989586621679114297"><span class="hs-identifier hs-var">enc</span></a></span><span> </span><span class="hs-keyword">in</span><span>
</span><a href="#local-6989586621679114440"><span class="hs-identifier hs-var">enc</span></a></span><span> </span><span class="hs-keyword">in</span><span>
</span><span id="line-31"></span><span> </span><span class="annot"><span class="annottext">ByteString -> ByteString -> ByteString
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-var">BL.append</span></a></span><span> </span><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114299"><span class="hs-identifier hs-var">hdr</span></a></span><span> </span><span class="annot"><span class="annottext">(ByteString -> ByteString) -> ByteString -> ByteString
</span><a href="#local-6989586621679114442"><span class="hs-identifier hs-var">hdr</span></a></span><span> </span><span class="annot"><span class="annottext">(ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">MuxSDU -> ByteString
</span><a href="Network.Mux.Types.html#msBlob"><span class="hs-identifier hs-var hs-var">msBlob</span></a></span><span> </span><span class="annot"><span class="annottext">MuxSDU
</span><a href="#local-6989586621679114300"><span class="hs-identifier hs-var">sdu</span></a></span><span>
</span><a href="#local-6989586621679114443"><span class="hs-identifier hs-var">sdu</span></a></span><span>
</span><span id="line-32"></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-33"></span><span> </span><span id="local-6989586621679114297"><span class="annot"><span class="annottext">enc :: Put
</span><a href="#local-6989586621679114297"><span class="hs-identifier hs-var hs-var">enc</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-33"></span><span> </span><span id="local-6989586621679114440"><span class="annot"><span class="annottext">enc :: Put
</span><a href="#local-6989586621679114440"><span class="hs-identifier hs-var hs-var">enc</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-34"></span><span> </span><span class="annot"><span class="annottext">Word32 -> Put
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/binary-0.8.8.0/src"><span class="hs-identifier hs-var">Bin.putWord32be</span></a></span><span> </span><span class="annot"><span class="annottext">(Word32 -> Put) -> Word32 -> Put
forall a b. (a -> b) -> a -> b
forall a b. (a -> b) -> a -> b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">MuxSDU -> RemoteClockModel
</span><a href="Network.Mux.Types.html#msTimestamp"><span class="hs-identifier hs-var">msTimestamp</span></a></span><span> </span><span class="annot"><span class="annottext">MuxSDU
</span><a href="#local-6989586621679114300"><span class="hs-identifier hs-var">sdu</span></a></span><span>
</span><a href="#local-6989586621679114443"><span class="hs-identifier hs-var">sdu</span></a></span><span>
</span><span id="line-35"></span><span> </span><span class="annot"><span class="annottext">Word16 -> Put
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/binary-0.8.8.0/src"><span class="hs-identifier hs-var">Bin.putWord16be</span></a></span><span> </span><span class="annot"><span class="annottext">(Word16 -> Put) -> Word16 -> Put
forall a b. (a -> b) -> a -> b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">MiniProtocolNum -> MiniProtocolDir -> Word16
</span><a href="#local-6989586621679114290"><span class="hs-identifier hs-var">putNumAndMode</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">MuxSDU -> MiniProtocolNum
</span><a href="#local-6989586621679114433"><span class="hs-identifier hs-var">putNumAndMode</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">MuxSDU -> MiniProtocolNum
</span><a href="Network.Mux.Types.html#msNum"><span class="hs-identifier hs-var">msNum</span></a></span><span> </span><span class="annot"><span class="annottext">MuxSDU
</span><a href="#local-6989586621679114300"><span class="hs-identifier hs-var">sdu</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">MuxSDU -> MiniProtocolDir
</span><a href="#local-6989586621679114443"><span class="hs-identifier hs-var">sdu</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">MuxSDU -> MiniProtocolDir
</span><a href="Network.Mux.Types.html#msDir"><span class="hs-identifier hs-var">msDir</span></a></span><span> </span><span class="annot"><span class="annottext">MuxSDU
</span><a href="#local-6989586621679114300"><span class="hs-identifier hs-var">sdu</span></a></span><span class="hs-special">)</span><span>
</span><a href="#local-6989586621679114443"><span class="hs-identifier hs-var">sdu</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-36"></span><span> </span><span class="annot"><span class="annottext">Word16 -> Put
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/binary-0.8.8.0/src"><span class="hs-identifier hs-var">Bin.putWord16be</span></a></span><span> </span><span class="annot"><span class="annottext">(Word16 -> Put) -> Word16 -> Put
forall a b. (a -> b) -> a -> b
forall a b. (a -> b) -> a -> b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">MuxSDU -> ByteString
</span><a href="Network.Mux.Types.html#msBlob"><span class="hs-identifier hs-var hs-var">msBlob</span></a></span><span> </span><span class="annot"><span class="annottext">MuxSDU
</span><a href="#local-6989586621679114300"><span class="hs-identifier hs-var">sdu</span></a></span><span>
</span><a href="#local-6989586621679114443"><span class="hs-identifier hs-var">sdu</span></a></span><span>
</span><span id="line-37"></span><span>
</span><span id="line-38"></span><span> </span><span class="annot"><a href="#local-6989586621679114290"><span class="hs-identifier hs-type">putNumAndMode</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="Network.Mux.Types.html#MiniProtocolNum"><span class="hs-identifier hs-type">MiniProtocolNum</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Network.Mux.Types.html#MiniProtocolDir"><span class="hs-identifier hs-type">MiniProtocolDir</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Word16</span></a></span><span>
</span><span id="line-39"></span><span> </span><span id="local-6989586621679114290"><span class="annot"><span class="annottext">putNumAndMode :: MiniProtocolNum -> MiniProtocolDir -> Word16
</span><a href="#local-6989586621679114290"><span class="hs-identifier hs-var hs-var">putNumAndMode</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Types.html#MiniProtocolNum"><span class="hs-identifier hs-type">MiniProtocolNum</span></a></span><span> </span><span id="local-6989586621679114285"><span class="annot"><span class="annottext">Word16
</span><a href="#local-6989586621679114285"><span class="hs-identifier hs-var">n</span></a></span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">MiniProtocolDir
</span><span id="line-38"></span><span> </span><span class="annot"><a href="#local-6989586621679114433"><span class="hs-identifier hs-type">putNumAndMode</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="Network.Mux.Types.html#MiniProtocolNum"><span class="hs-identifier hs-type">MiniProtocolNum</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Network.Mux.Types.html#MiniProtocolDir"><span class="hs-identifier hs-type">MiniProtocolDir</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Word16</span></a></span><span>
</span><span id="line-39"></span><span> </span><span id="local-6989586621679114433"><span class="annot"><span class="annottext">putNumAndMode :: MiniProtocolNum -> MiniProtocolDir -> Word16
</span><a href="#local-6989586621679114433"><span class="hs-identifier hs-var hs-var">putNumAndMode</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Types.html#MiniProtocolNum"><span class="hs-identifier hs-type">MiniProtocolNum</span></a></span><span> </span><span id="local-6989586621679114428"><span class="annot"><span class="annottext">Word16
</span><a href="#local-6989586621679114428"><span class="hs-identifier hs-var">n</span></a></span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">MiniProtocolDir
</span><a href="Network.Mux.Types.html#InitiatorDir"><span class="hs-identifier hs-var">InitiatorDir</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Word16
</span><a href="#local-6989586621679114285"><span class="hs-identifier hs-var">n</span></a></span><span>
</span><span id="line-40"></span><span> </span><span class="annot"><a href="#local-6989586621679114290"><span class="hs-identifier hs-var">putNumAndMode</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Types.html#MiniProtocolNum"><span class="hs-identifier hs-type">MiniProtocolNum</span></a></span><span> </span><span id="local-6989586621679114283"><span class="annot"><span class="annottext">Word16
</span><a href="#local-6989586621679114283"><span class="hs-identifier hs-var">n</span></a></span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">MiniProtocolDir
</span><a href="#local-6989586621679114428"><span class="hs-identifier hs-var">n</span></a></span><span>
</span><span id="line-40"></span><span> </span><span class="annot"><a href="#local-6989586621679114433"><span class="hs-identifier hs-var">putNumAndMode</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Types.html#MiniProtocolNum"><span class="hs-identifier hs-type">MiniProtocolNum</span></a></span><span> </span><span id="local-6989586621679114426"><span class="annot"><span class="annottext">Word16
</span><a href="#local-6989586621679114426"><span class="hs-identifier hs-var">n</span></a></span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">MiniProtocolDir
</span><a href="Network.Mux.Types.html#ResponderDir"><span class="hs-identifier hs-var">ResponderDir</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Word16
</span><a href="#local-6989586621679114283"><span class="hs-identifier hs-var">n</span></a></span><span> </span><span class="annot"><span class="annottext">Word16 -> Word16 -> Word16
</span><a href="#local-6989586621679114426"><span class="hs-identifier hs-var">n</span></a></span><span> </span><span class="annot"><span class="annottext">Word16 -> Word16 -> Word16
forall a. Bits a => a -> a -> a
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">.|.</span></a></span><span> </span><span class="annot"><span class="annottext">Word16
</span><span class="hs-number">0x8000</span></span><span>
</span><span id="line-44"></span><span class="hs-comment">--</span><span>
</span><span id="line-45"></span><span class="annot"><a href="Network.Mux.Codec.html#decodeMuxSDU"><span class="hs-identifier hs-type">decodeMuxSDU</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-type">BL.ByteString</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Either</span></a></span><span> </span><span class="annot"><a href="Network.Mux.Trace.html#MuxError"><span class="hs-identifier hs-type">MuxError</span></a></span><span> </span><span class="annot"><a href="Network.Mux.Types.html#MuxSDU"><span class="hs-identifier hs-type">MuxSDU</span></a></span><span>
</span><span id="line-46"></span><span id="decodeMuxSDU"><span class="annot"><span class="annottext">decodeMuxSDU :: ByteString -> Either MuxError MuxSDU
</span><a href="Network.Mux.Codec.html#decodeMuxSDU"><span class="hs-identifier hs-var hs-var">decodeMuxSDU</span></a></span></span><span> </span><span id="local-6989586621679114279"><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114279"><span class="hs-identifier hs-var">buf</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><a href="Network.Mux.Codec.html#decodeMuxSDU"><span class="hs-identifier hs-var hs-var">decodeMuxSDU</span></a></span></span><span> </span><span id="local-6989586621679114422"><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114422"><span class="hs-identifier hs-var">buf</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-47"></span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Get MuxSDUHeader
-> ByteString
-> Either
-> ByteString
-> Either (ByteString, Int64, String) (ByteString, Int64, a)
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/binary-0.8.8.0/src"><span class="hs-identifier hs-var">Bin.runGetOrFail</span></a></span><span> </span><span class="annot"><span class="annottext">Get MuxSDUHeader
</span><a href="#local-6989586621679114277"><span class="hs-identifier hs-var">dec</span></a></span><span> </span><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114279"><span class="hs-identifier hs-var">buf</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><a href="#local-6989586621679114420"><span class="hs-identifier hs-var">dec</span></a></span><span> </span><span class="annot"><span class="annottext">ByteString
</span><a href="#local-6989586621679114422"><span class="hs-identifier hs-var">buf</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-48"></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Left</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">ByteString
</span><span class="hs-identifier">_</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int64
</span><span class="hs-identifier">_</span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621679114276"><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621679114276"><span class="hs-identifier hs-var">e</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="annottext">MuxError -> Either MuxError MuxSDU
</span><span class="hs-identifier">_</span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621679114419"><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621679114419"><span class="hs-identifier hs-var">e</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><span class="annottext">MuxError -> Either MuxError MuxSDU
forall a b. a -> Either a b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-var">Left</span></a></span><span> </span><span class="annot"><span class="annottext">(MuxError -> Either MuxError MuxSDU)
-> MuxError -> Either MuxError MuxSDU
forall a b. (a -> b) -> a -> b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">MuxErrorType -> String -> MuxError
</span><a href="Network.Mux.Trace.html#MuxError"><span class="hs-identifier hs-var">MuxError</span></a></span><span> </span><span class="annot"><span class="annottext">MuxErrorType
</span><a href="Network.Mux.Trace.html#MuxDecodeError"><span class="hs-identifier hs-var">MuxDecodeError</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621679114276"><span class="hs-identifier hs-var">e</span></a></span><span>
</span><a href="#local-6989586621679114419"><span class="hs-identifier hs-var">e</span></a></span><span>
</span><span id="line-49"></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Right</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">ByteString
</span><span class="hs-identifier">_</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int64
</span><span class="hs-identifier">_</span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621679114273"><span class="annot"><span class="annottext">MuxSDUHeader
</span><a href="#local-6989586621679114273"><span class="hs-identifier hs-var">h</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-></span><span>
</span><span class="hs-identifier">_</span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621679114416"><span class="annot"><span class="annottext">MuxSDUHeader
</span><a href="#local-6989586621679114416"><span class="hs-identifier hs-var">h</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-></span><span>
</span><span id="line-50"></span><span> </span><span class="annot"><span class="annottext">MuxSDU -> Either MuxError MuxSDU
forall a b. b -> Either a b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-var">Right</span></a></span><span> </span><span class="annot"><span class="annottext">(MuxSDU -> Either MuxError MuxSDU)
</span><a href="Network.Mux.Types.html#MuxSDU"><span class="hs-identifier hs-type">MuxSDU</span></a></span><span> </span><span class="hs-special">{</span><span>
</span><span id="line-51"></span><span> </span><span class="annot"><span class="annottext">msHeader :: MuxSDUHeader
</span><a href="Network.Mux.Types.html#msHeader"><span class="hs-identifier hs-var">msHeader</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">MuxSDUHeader
</span><a href="#local-6989586621679114273"><span class="hs-identifier hs-var">h</span></a></span><span>
</span><a href="#local-6989586621679114416"><span class="hs-identifier hs-var">h</span></a></span><span>
</span><span id="line-52"></span><span> </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">msBlob :: ByteString
</span><a href="Network.Mux.Types.html#msBlob"><span class="hs-identifier hs-var">msBlob</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">ByteString
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-var">BL.empty</span></a></span><span>
</span><span id="line-53"></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-54"></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-55"></span><span> </span><span id="local-6989586621679114277"><span class="annot"><span class="annottext">dec :: Get MuxSDUHeader
</span><a href="#local-6989586621679114277"><span class="hs-identifier hs-var hs-var">dec</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-56"></span><span> </span><span id="local-6989586621679114269"><span class="annot"><span class="annottext">RemoteClockModel
</span><a href="#local-6989586621679114269"><span class="hs-identifier hs-var">mhTimestamp</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">Word32 -> RemoteClockModel
</span><span id="line-55"></span><span> </span><span id="local-6989586621679114420"><span class="annot"><span class="annottext">dec :: Get MuxSDUHeader
</span><a href="#local-6989586621679114420"><span class="hs-identifier hs-var hs-var">dec</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-56"></span><span> </span><span id="local-6989586621679114412"><span class="annot"><span class="annottext">RemoteClockModel
</span><a href="#local-6989586621679114412"><span class="hs-identifier hs-var">mhTimestamp</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">Word32 -> RemoteClockModel
</span><a href="Network.Mux.Types.html#RemoteClockModel"><span class="hs-identifier hs-var">RemoteClockModel</span></a></span><span> </span><span class="annot"><span class="annottext">(Word32 -> RemoteClockModel) -> Get Word32 -> Get RemoteClockModel
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var"><$></span></a></span><span> </span><span class="annot"><span class="annottext">Get Word32
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/binary-0.8.8.0/src"><span class="hs-identifier hs-var">Bin.getWord32be</span></a></span><span>
</span><span id="line-57"></span><span> </span><span id="local-6989586621679114265"><span class="annot"><span class="annottext">Word16
</span><a href="#local-6989586621679114265"><span class="hs-identifier hs-var">a</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">Get Word16
</span><span id="line-57"></span><span> </span><span id="local-6989586621679114408"><span class="annot"><span class="annottext">Word16
</span><a href="#local-6989586621679114408"><span class="hs-identifier hs-var">a</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">Get Word16
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/binary-0.8.8.0/src"><span class="hs-identifier hs-var">Bin.getWord16be</span></a></span><span>
</span><span id="line-58"></span><span> </span><span id="local-6989586621679114263"><span class="annot"><span class="annottext">Word16
</span><a href="#local-6989586621679114263"><span class="hs-identifier hs-var">mhLength</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">Get Word16
</span><span id="line-58"></span><span> </span><span id="local-6989586621679114406"><span class="annot"><span class="annottext">Word16
</span><a href="#local-6989586621679114406"><span class="hs-identifier hs-var">mhLength</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">Get Word16
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/binary-0.8.8.0/src"><span class="hs-identifier hs-var">Bin.getWord16be</span></a></span><span>
</span><span id="line-59"></span><span> </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621679114262"><span class="annot"><span class="annottext">mhDir :: MiniProtocolDir
</span><a href="#local-6989586621679114262"><span class="hs-identifier hs-var hs-var">mhDir</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Word16 -> MiniProtocolDir
</span><span id="line-59"></span><span> </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621679114405"><span class="annot"><span class="annottext">mhDir :: MiniProtocolDir
</span><a href="#local-6989586621679114405"><span class="hs-identifier hs-var hs-var">mhDir</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Word16 -> MiniProtocolDir
forall a. (Bits a, Num a) => a -> MiniProtocolDir
</span><a href="#local-6989586621679114261"><span class="hs-identifier hs-var">getDir</span></a></span><span> </span><span class="annot"><span class="annottext">Word16
</span><a href="#local-6989586621679114265"><span class="hs-identifier hs-var">a</span></a></span><span>
</span><span id="line-60"></span><span> </span><span id="local-6989586621679114260"><span class="annot"><span class="annottext">mhNum :: MiniProtocolNum
</span><a href="#local-6989586621679114260"><span class="hs-identifier hs-var hs-var">mhNum</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Word16 -> MiniProtocolNum
</span><a href="#local-6989586621679114404"><span class="hs-identifier hs-var">getDir</span></a></span><span> </span><span class="annot"><span class="annottext">Word16
</span><a href="#local-6989586621679114408"><span class="hs-identifier hs-var">a</span></a></span><span>
</span><span id="line-60"></span><span> </span><span id="local-6989586621679114403"><span class="annot"><span class="annottext">mhNum :: MiniProtocolNum
</span><a href="#local-6989586621679114403"><span class="hs-identifier hs-var hs-var">mhNum</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Word16 -> MiniProtocolNum
</span><a href="Network.Mux.Types.html#MiniProtocolNum"><span class="hs-identifier hs-var">MiniProtocolNum</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Word16
</span><a href="#local-6989586621679114265"><span class="hs-identifier hs-var">a</span></a></span><span> </span><span class="annot"><span class="annottext">Word16 -> Word16 -> Word16
</span><a href="#local-6989586621679114408"><span class="hs-identifier hs-var">a</span></a></span><span> </span><span class="annot"><span class="annottext">Word16 -> Word16 -> Word16
forall a. Bits a => a -> a -> a
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">.&.</span></a></span><span> </span><span class="annot"><span class="annottext">Word16
</span><span class="hs-number">0x7fff</span></span><span class="hs-special">)</span><span>
</span><span id="line-64"></span><span> </span><span class="annot"><span class="annottext">MiniProtocolDir
mhDir :: MiniProtocolDir
mhDir :: MiniProtocolDir
</span><a href="#local-6989586621679114255"><span class="hs-identifier hs-var hs-var">mhDir</span></a></span><span class="hs-special">,</span><span>
</span><a href="#local-6989586621679114398"><span class="hs-identifier hs-var hs-var">mhDir</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-65"></span><span> </span><span class="annot"><span class="annottext">Word16
mhLength :: Word16
mhLength :: Word16
</span><a href="#local-6989586621679114254"><span class="hs-identifier hs-var hs-var">mhLength</span></a></span><span>
</span><a href="#local-6989586621679114397"><span class="hs-identifier hs-var hs-var">mhLength</span></a></span><span>
</span><span id="line-66"></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-67"></span><span>
</span><span id="line-68"></span><span> </span><span id="local-6989586621679114261"><span class="annot"><span class="annottext">getDir :: a -> MiniProtocolDir
</span><a href="#local-6989586621679114261"><span class="hs-identifier hs-var hs-var">getDir</span></a></span></span><span> </span><span id="local-6989586621679114253"><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621679114253"><span class="hs-identifier hs-var">mid</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-68"></span><span> </span><span id="local-6989586621679114404"><span class="annot"><span class="annottext">getDir :: a -> MiniProtocolDir
</span><a href="#local-6989586621679114404"><span class="hs-identifier hs-var hs-var">getDir</span></a></span></span><span> </span><span id="local-6989586621679114396"><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621679114396"><span class="hs-identifier hs-var">mid</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-69"></span><span> </span><span class="hs-keyword">if</span><span> </span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621679114253"><span class="hs-identifier hs-var">mid</span></a></span><span> </span><span class="annot"><span class="annottext">a -> a -> a
</span><a href="#local-6989586621679114396"><span class="hs-identifier hs-var">mid</span></a></span><span> </span><span class="annot"><span class="annottext">a -> a -> a
forall a. Bits a => a -> a -> a
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-operator hs-var">.&.</span></a></span><span> </span><span class="annot"><span class="annottext">a
</span><span id="line-55"></span><span class="hs-keyword">import</span><span> </span><span class="hs-keyword">qualified</span><span> </span><span class="annot"><a href="Network.Mux.Types.html"><span class="hs-identifier">Network.Mux.Types</span></a></span><span> </span><span class="hs-keyword">as</span><span> </span><span class="annot"><span class="hs-identifier">Types</span></span><span>
</span><span id="line-56"></span><span>
</span><span id="line-57"></span><span>
</span><span id="line-58"></span><span class="hs-keyword">newtype</span><span> </span><span id="MuxApplication"><span class="annot"><a href="Network.Mux.Compat.html#MuxApplication"><span class="hs-identifier hs-var">MuxApplication</span></a></span></span><span> </span><span class="hs-special">(</span><span id="local-6989586621679115677"><span class="annot"><a href="#local-6989586621679115677"><span class="hs-identifier hs-type">mode</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="Network.Mux.Types.html#MuxMode"><span class="hs-identifier hs-type">MuxMode</span></a></span><span class="hs-special">)</span><span> </span><span id="local-6989586621679115676"><span class="annot"><a href="#local-6989586621679115676"><span class="hs-identifier hs-type">m</span></a></span></span><span> </span><span id="local-6989586621679115675"><span class="annot"><a href="#local-6989586621679115675"><span class="hs-identifier hs-type">a</span></a></span></span><span> </span><span id="local-6989586621679115674"><span class="annot"><a href="#local-6989586621679115674"><span class="hs-identifier hs-type">b</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-59"></span><span> </span><span id="MuxApplication"><span class="annot"><a href="Network.Mux.Compat.html#MuxApplication"><span class="hs-identifier hs-var">MuxApplication</span></a></span></span><span> </span><span class="hs-special">[</span><span class="annot"><a href="Network.Mux.Compat.html#MuxMiniProtocol"><span class="hs-identifier hs-type">MuxMiniProtocol</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115677"><span class="hs-identifier hs-type">mode</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115676"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115675"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115674"><span class="hs-identifier hs-type">b</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-58"></span><span class="hs-keyword">newtype</span><span> </span><span id="MuxApplication"><span class="annot"><a href="Network.Mux.Compat.html#MuxApplication"><span class="hs-identifier hs-var">MuxApplication</span></a></span></span><span> </span><span class="hs-special">(</span><span id="local-6989586621679115820"><span class="annot"><a href="#local-6989586621679115820"><span class="hs-identifier hs-type">mode</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="Network.Mux.Types.html#MuxMode"><span class="hs-identifier hs-type">MuxMode</span></a></span><span class="hs-special">)</span><span> </span><span id="local-6989586621679115819"><span class="annot"><a href="#local-6989586621679115819"><span class="hs-identifier hs-type">m</span></a></span></span><span> </span><span id="local-6989586621679115818"><span class="annot"><a href="#local-6989586621679115818"><span class="hs-identifier hs-type">a</span></a></span></span><span> </span><span id="local-6989586621679115817"><span class="annot"><a href="#local-6989586621679115817"><span class="hs-identifier hs-type">b</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-59"></span><span> </span><span id="MuxApplication"><span class="annot"><a href="Network.Mux.Compat.html#MuxApplication"><span class="hs-identifier hs-var">MuxApplication</span></a></span></span><span> </span><span class="hs-special">[</span><span class="annot"><a href="Network.Mux.Compat.html#MuxMiniProtocol"><span class="hs-identifier hs-type">MuxMiniProtocol</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115820"><span class="hs-identifier hs-type">mode</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115819"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115818"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115817"><span class="hs-identifier hs-type">b</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-60"></span><span>
</span><span id="line-61"></span><span class="hs-keyword">data</span><span> </span><span id="MuxMiniProtocol"><span class="annot"><a href="Network.Mux.Compat.html#MuxMiniProtocol"><span class="hs-identifier hs-var">MuxMiniProtocol</span></a></span></span><span> </span><span class="hs-special">(</span><span id="local-6989586621679115736"><span class="annot"><a href="#local-6989586621679115736"><span class="hs-identifier hs-type">mode</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="Network.Mux.Types.html#MuxMode"><span class="hs-identifier hs-type">MuxMode</span></a></span><span class="hs-special">)</span><span> </span><span id="local-6989586621679115735"><span class="annot"><a href="#local-6989586621679115735"><span class="hs-identifier hs-type">m</span></a></span></span><span> </span><span id="local-6989586621679115734"><span class="annot"><a href="#local-6989586621679115734"><span class="hs-identifier hs-type">a</span></a></span></span><span> </span><span id="local-6989586621679115733"><span class="annot"><a href="#local-6989586621679115733"><span class="hs-identifier hs-type">b</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-61"></span><span class="hs-keyword">data</span><span> </span><span id="MuxMiniProtocol"><span class="annot"><a href="Network.Mux.Compat.html#MuxMiniProtocol"><span class="hs-identifier hs-var">MuxMiniProtocol</span></a></span></span><span> </span><span class="hs-special">(</span><span id="local-6989586621679115879"><span class="annot"><a href="#local-6989586621679115879"><span class="hs-identifier hs-type">mode</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="Network.Mux.Types.html#MuxMode"><span class="hs-identifier hs-type">MuxMode</span></a></span><span class="hs-special">)</span><span> </span><span id="local-6989586621679115878"><span class="annot"><a href="#local-6989586621679115878"><span class="hs-identifier hs-type">m</span></a></span></span><span> </span><span id="local-6989586621679115877"><span class="annot"><a href="#local-6989586621679115877"><span class="hs-identifier hs-type">a</span></a></span></span><span> </span><span id="local-6989586621679115876"><span class="annot"><a href="#local-6989586621679115876"><span class="hs-identifier hs-type">b</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-62"></span><span> </span><span id="MuxMiniProtocol"><span class="annot"><a href="Network.Mux.Compat.html#MuxMiniProtocol"><span class="hs-identifier hs-var">MuxMiniProtocol</span></a></span></span><span> </span><span class="hs-special">{</span><span>
</span><span id="line-63"></span><span> </span><span id="miniProtocolNum"><span class="annot"><span class="annottext">MuxMiniProtocol mode m a b -> MiniProtocolNum
</span><a href="Network.Mux.Compat.html#miniProtocolNum"><span class="hs-identifier hs-var hs-var">miniProtocolNum</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-glyph">!</span><span class="annot"><a href="Network.Mux.Types.html#MiniProtocolNum"><span class="hs-identifier hs-type">MiniProtocolNum</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-64"></span><span> </span><span id="miniProtocolLimits"><span class="annot"><span class="annottext">MuxMiniProtocol mode m a b -> MiniProtocolLimits
</span><a href="Network.Mux.Compat.html#miniProtocolLimits"><span class="hs-identifier hs-var hs-var">miniProtocolLimits</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-glyph">!</span><span class="annot"><a href="Network.Mux.Types.html#MiniProtocolLimits"><span class="hs-identifier hs-type">MiniProtocolLimits</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-65"></span><span> </span><span id="miniProtocolRun"><span class="annot"><span class="annottext">MuxMiniProtocol mode m a b -> RunMiniProtocol mode m a b
</span><a href="Network.Mux.Compat.html#miniProtocolRun"><span class="hs-identifier hs-var hs-var">miniProtocolRun</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-glyph">!</span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Compat.html#RunMiniProtocol"><span class="hs-identifier hs-type">RunMiniProtocol</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115736"><span class="hs-identifier hs-type">mode</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115735"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115734"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115733"><span class="hs-identifier hs-type">b</span></a></span><span class="hs-special">)</span><span>
</span><a href="Network.Mux.Compat.html#miniProtocolRun"><span class="hs-identifier hs-var hs-var">miniProtocolRun</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-glyph">!</span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Compat.html#RunMiniProtocol"><span class="hs-identifier hs-type">RunMiniProtocol</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115879"><span class="hs-identifier hs-type">mode</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115878"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115877"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115876"><span class="hs-identifier hs-type">b</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-66"></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-67"></span><span>
</span><span id="line-68"></span><span class="hs-keyword">data</span><span> </span><span id="RunMiniProtocol"><span class="annot"><a href="Network.Mux.Compat.html#RunMiniProtocol"><span class="hs-identifier hs-var">RunMiniProtocol</span></a></span></span><span> </span><span class="hs-special">(</span><span id="local-6989586621679115668"><span class="annot"><a href="#local-6989586621679115668"><span class="hs-identifier hs-type">mode</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="Network.Mux.Types.html#MuxMode"><span class="hs-identifier hs-type">MuxMode</span></a></span><span class="hs-special">)</span><span> </span><span id="local-6989586621679115667"><span class="annot"><a href="#local-6989586621679115667"><span class="hs-identifier hs-type">m</span></a></span></span><span> </span><span id="local-6989586621679115666"><span class="annot"><a href="#local-6989586621679115666"><span class="hs-identifier hs-type">a</span></a></span></span><span> </span><span id="local-6989586621679115665"><span class="annot"><a href="#local-6989586621679115665"><span class="hs-identifier hs-type">b</span></a></span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-69"></span><span> </span><span id="local-6989586621679115663"><span id="local-6989586621679115664"><span id="InitiatorProtocolOnly"><span class="annot"><a href="Network.Mux.Compat.html#InitiatorProtocolOnly"><span class="hs-identifier hs-var">InitiatorProtocolOnly</span></a></span></span><span>
</span><span id="line-68"></span><span class="hs-keyword">data</span><span> </span><span id="RunMiniProtocol"><span class="annot"><a href="Network.Mux.Compat.html#RunMiniProtocol"><span class="hs-identifier hs-var">RunMiniProtocol</span></a></span></span><span> </span><span class="hs-special">(</span><span id="local-6989586621679115811"><span class="annot"><a href="#local-6989586621679115811"><span class="hs-identifier hs-type">mode</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="Network.Mux.Types.html#MuxMode"><span class="hs-identifier hs-type">MuxMode</span></a></span><span class="hs-special">)</span><span> </span><span id="local-6989586621679115810"><span class="annot"><a href="#local-6989586621679115810"><span class="hs-identifier hs-type">m</span></a></span></span><span> </span><span id="local-6989586621679115809"><span class="annot"><a href="#local-6989586621679115809"><span class="hs-identifier hs-type">a</span></a></span></span><span> </span><span id="local-6989586621679115808"><span class="annot"><a href="#local-6989586621679115808"><span class="hs-identifier hs-type">b</span></a></span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-69"></span><span> </span><span id="local-6989586621679115806"><span id="local-6989586621679115807"><span id="InitiatorProtocolOnly"><span class="annot"><a href="Network.Mux.Compat.html#InitiatorProtocolOnly"><span class="hs-identifier hs-var">InitiatorProtocolOnly</span></a></span></span><span>
</span><span id="line-70"></span><span> </span><span class="hs-comment">-- Initiator application; most simple application will be @'runPeer'@ or</span><span>
</span><span id="line-71"></span><span> </span><span class="hs-comment">-- @'runPipelinedPeer'@ supplied with a codec and a @'Peer'@ for each</span><span>
</span><span id="line-72"></span><span> </span><span class="hs-comment">-- @ptcl@. But it allows to handle resources if just application of</span><span>
</span><span id="line-73"></span><span> </span><span class="hs-comment">-- @'runPeer'@ is not enough. It will be run as @'InitiatorDir'@.</span><span>
</span><span id="line-74"></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Channel.html#Channel"><span class="hs-identifier hs-type">Channel</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115664"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679115664"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="#local-6989586621679115663"><span class="hs-identifier hs-type">a</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-type">BL.ByteString</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-75"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Network.Mux.Compat.html#RunMiniProtocol"><span class="hs-identifier hs-type">RunMiniProtocol</span></a></span><span> </span><span class="annot"><a href="Network.Mux.Types.html#InitiatorMode"><span class="hs-identifier hs-type">InitiatorMode</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115664"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115663"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Void</span></a></span></span></span><span>
</span><span id="line-74"></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Channel.html#Channel"><span class="hs-identifier hs-type">Channel</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115807"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679115807"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="#local-6989586621679115806"><span class="hs-identifier hs-type">a</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-type">BL.ByteString</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-75"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Network.Mux.Compat.html#RunMiniProtocol"><span class="hs-identifier hs-type">RunMiniProtocol</span></a></span><span> </span><span class="annot"><a href="Network.Mux.Types.html#InitiatorMode"><span class="hs-identifier hs-type">InitiatorMode</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115807"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115806"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Void</span></a></span></span></span><span>
</span><span id="line-76"></span><span>
</span><span id="line-77"></span><span> </span><span id="local-6989586621679115660"><span id="local-6989586621679115661"><span id="ResponderProtocolOnly"><span class="annot"><a href="Network.Mux.Compat.html#ResponderProtocolOnly"><span class="hs-identifier hs-var">ResponderProtocolOnly</span></a></span></span><span>
</span><span id="line-77"></span><span> </span><span id="local-6989586621679115803"><span id="local-6989586621679115804"><span id="ResponderProtocolOnly"><span class="annot"><a href="Network.Mux.Compat.html#ResponderProtocolOnly"><span class="hs-identifier hs-var">ResponderProtocolOnly</span></a></span></span><span>
</span><span id="line-78"></span><span> </span><span class="hs-comment">-- Responder application; similarly to the @'MuxInitiatorApplication'@ but it</span><span>
</span><span id="line-79"></span><span> </span><span class="hs-comment">-- will be run using @'ResponderDir'@.</span><span>
</span><span id="line-80"></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Channel.html#Channel"><span class="hs-identifier hs-type">Channel</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115661"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679115661"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="#local-6989586621679115660"><span class="hs-identifier hs-type">b</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-type">BL.ByteString</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-81"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Network.Mux.Compat.html#RunMiniProtocol"><span class="hs-identifier hs-type">RunMiniProtocol</span></a></span><span> </span><span class="annot"><a href="Network.Mux.Types.html#ResponderMode"><span class="hs-identifier hs-type">ResponderMode</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115661"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Void</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115660"><span class="hs-identifier hs-type">b</span></a></span></span></span><span>
</span><span id="line-80"></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Channel.html#Channel"><span class="hs-identifier hs-type">Channel</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115804"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679115804"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="#local-6989586621679115803"><span class="hs-identifier hs-type">b</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-type">BL.ByteString</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-81"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Network.Mux.Compat.html#RunMiniProtocol"><span class="hs-identifier hs-type">RunMiniProtocol</span></a></span><span> </span><span class="annot"><a href="Network.Mux.Types.html#ResponderMode"><span class="hs-identifier hs-type">ResponderMode</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115804"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Void</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115803"><span class="hs-identifier hs-type">b</span></a></span></span></span><span>
</span><span id="line-82"></span><span>
</span><span id="line-83"></span><span> </span><span id="local-6989586621679115656"><span id="local-6989586621679115657"><span id="local-6989586621679115658"><span id="InitiatorAndResponderProtocol"><span class="annot"><a href="Network.Mux.Compat.html#InitiatorAndResponderProtocol"><span class="hs-identifier hs-var">InitiatorAndResponderProtocol</span></a></span></span><span>
</span><span id="line-83"></span><span> </span><span id="local-6989586621679115799"><span id="local-6989586621679115800"><span id="local-6989586621679115801"><span id="InitiatorAndResponderProtocol"><span class="annot"><a href="Network.Mux.Compat.html#InitiatorAndResponderProtocol"><span class="hs-identifier hs-var">InitiatorAndResponderProtocol</span></a></span></span><span>
</span><span id="line-84"></span><span> </span><span class="hs-comment">-- Initiator and server applications.</span><span>
</span><span id="line-85"></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Channel.html#Channel"><span class="hs-identifier hs-type">Channel</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115658"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679115658"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="#local-6989586621679115657"><span class="hs-identifier hs-type">a</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-type">BL.ByteString</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-86"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Channel.html#Channel"><span class="hs-identifier hs-type">Channel</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115658"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679115658"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="#local-6989586621679115656"><span class="hs-identifier hs-type">b</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-type">BL.ByteString</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-87"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Network.Mux.Compat.html#RunMiniProtocol"><span class="hs-identifier hs-type">RunMiniProtocol</span></a></span><span> </span><span class="annot"><a href="Network.Mux.Types.html#InitiatorResponderMode"><span class="hs-identifier hs-type">InitiatorResponderMode</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115658"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115657"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115656"><span class="hs-identifier hs-type">b</span></a></span></span></span></span><span>
</span><span id="line-85"></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Channel.html#Channel"><span class="hs-identifier hs-type">Channel</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115801"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679115801"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="#local-6989586621679115800"><span class="hs-identifier hs-type">a</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-type">BL.ByteString</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-86"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="Network.Mux.Channel.html#Channel"><span class="hs-identifier hs-type">Channel</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115801"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679115801"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="#local-6989586621679115799"><span class="hs-identifier hs-type">b</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/bytestring-0.10.12.0/src"><span class="hs-identifier hs-type">BL.ByteString</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-87"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Network.Mux.Compat.html#RunMiniProtocol"><span class="hs-identifier hs-type">RunMiniProtocol</span></a></span><span> </span><span class="annot"><a href="Network.Mux.Types.html#InitiatorResponderMode"><span class="hs-identifier hs-type">InitiatorResponderMode</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115801"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115800"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115799"><span class="hs-identifier hs-type">b</span></a></span></span></span></span><span>
</span><span id="line-88"></span><span>
</span><span id="line-89"></span><span>
</span><span id="line-90"></span><span class="annot"><a href="Network.Mux.Compat.html#muxStart"><span class="hs-identifier hs-type">muxStart</span></a></span><span>
</span><span id="line-91"></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-keyword">forall</span><span> </span><span id="local-6989586621679115654"><span class="annot"><a href="#local-6989586621679115654"><span class="hs-identifier hs-type">m</span></a></span></span><span> </span><span id="local-6989586621679115653"><span class="annot"><a href="#local-6989586621679115653"><span class="hs-identifier hs-type">mode</span></a></span></span><span> </span><span id="local-6989586621679115652"><span class="annot"><a href="#local-6989586621679115652"><span class="hs-identifier hs-type">a</span></a></span></span><span> </span><span id="local-6989586621679115651"><span class="annot"><a href="#local-6989586621679115651"><span class="hs-identifier hs-type">b</span></a></span></span><span class="hs-operator">.</span><span>
</span><span id="line-92"></span><span> </span><span class="hs-special">(</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadAsync</span></span><span> </span><span class="annot"><a href="#local-6989586621679115654"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-93"></span><span> </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadFork</span></span><span> </span><span class="annot"><a href="#local-6989586621679115654"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-94"></span><span> </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadLabelledSTM</span></span><span> </span><span class="annot"><a href="#local-6989586621679115654"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-95"></span><span> </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadThrow</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="hs-identifier hs-type">STM</span></span><span> </span><span class="annot"><a href="#local-6989586621679115654"><span class="hs-identifier hs-type">m</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-96"></span><span> </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadTime</span></span><span> </span><span class="annot"><a href="#local-6989586621679115654"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-97"></span><span> </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadTimer</span></span><span> </span><span class="annot"><a href="#local-6989586621679115654"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-98"></span><span> </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadMask</span></span><span> </span><span class="annot"><a href="#local-6989586621679115654"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-91"></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-keyword">forall</span><span> </span><span id="local-6989586621679115797"><span class="annot"><a href="#local-6989586621679115797"><span class="hs-identifier hs-type">m</span></a></span></span><span> </span><span id="local-6989586621679115796"><span class="annot"><a href="#local-6989586621679115796"><span class="hs-identifier hs-type">mode</span></a></span></span><span> </span><span id="local-6989586621679115795"><span class="annot"><a href="#local-6989586621679115795"><span class="hs-identifier hs-type">a</span></a></span></span><span> </span><span id="local-6989586621679115794"><span class="annot"><a href="#local-6989586621679115794"><span class="hs-identifier hs-type">b</span></a></span></span><span class="hs-operator">.</span><span>
</span><span id="line-92"></span><span> </span><span class="hs-special">(</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadAsync</span></span><span> </span><span class="annot"><a href="#local-6989586621679115797"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-93"></span><span> </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadFork</span></span><span> </span><span class="annot"><a href="#local-6989586621679115797"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-94"></span><span> </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadLabelledSTM</span></span><span> </span><span class="annot"><a href="#local-6989586621679115797"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-95"></span><span> </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadThrow</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="hs-identifier hs-type">STM</span></span><span> </span><span class="annot"><a href="#local-6989586621679115797"><span class="hs-identifier hs-type">m</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-96"></span><span> </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadTime</span></span><span> </span><span class="annot"><a href="#local-6989586621679115797"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-97"></span><span> </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadTimer</span></span><span> </span><span class="annot"><a href="#local-6989586621679115797"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-98"></span><span> </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">MonadMask</span></span><span> </span><span class="annot"><a href="#local-6989586621679115797"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-99"></span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-100"></span><span> </span><span class="hs-glyph">=></span><span> </span><span class="annot"><span class="hs-identifier hs-type">Tracer</span></span><span> </span><span class="annot"><a href="#local-6989586621679115654"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="Network.Mux.Trace.html#MuxTrace"><span class="hs-identifier hs-type">MuxTrace</span></a></span><span>
</span><span id="line-101"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Network.Mux.Compat.html#MuxApplication"><span class="hs-identifier hs-type">MuxApplication</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115653"><span class="hs-identifier hs-type">mode</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115654"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115652"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115651"><span class="hs-identifier hs-type">b</span></a></span><span>
</span><span id="line-102"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Network.Mux.Types.html#MuxBearer"><span class="hs-identifier hs-type">MuxBearer</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115654"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-103"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679115654"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
</span><span id="line-100"></span><span> </span><span class="hs-glyph">=></span><span> </span><span class="annot"><span class="hs-identifier hs-type">Tracer</span></span><span> </span><span class="annot"><a href="#local-6989586621679115797"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="Network.Mux.Trace.html#MuxTrace"><span class="hs-identifier hs-type">MuxTrace</span></a></span><span>
</span><span id="line-101"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Network.Mux.Compat.html#MuxApplication"><span class="hs-identifier hs-type">MuxApplication</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115796"><span class="hs-identifier hs-type">mode</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115797"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115795"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115794"><span class="hs-identifier hs-type">b</span></a></span><span>
</span><span id="line-102"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="Network.Mux.Types.html#MuxBearer"><span class="hs-identifier hs-type">MuxBearer</span></a></span><span> </span><span class="annot"><a href="#local-6989586621679115797"><span class="hs-identifier hs-type">m</span></a></span><span>
</span><span id="line-103"></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="annot"><a href="#local-6989586621679115797"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
</span><span id="line-104"></span><span id="muxStart"><span class="annot"><span class="annottext">muxStart :: Tracer m MuxTrace
-> MuxApplication mode m a b -> MuxBearer m -> m ()
</span><a href="Network.Mux.Compat.html#muxStart"><span class="hs-identifier hs-var hs-var">muxStart</span></a></span></span><span> </span><span id="local-6989586621679115650"><span class="annot"><span class="annottext">Tracer m MuxTrace
</span><a href="#local-6989586621679115650"><span class="hs-identifier hs-var">tracer</span></a></span></span><span> </span><span id="local-6989586621679115649"><span class="annot"><span class="annottext">MuxApplication mode m a b
</span><a href="#local-6989586621679115649"><span class="hs-identifier hs-var">muxapp</span></a></span></span><span> </span><span id="local-6989586621679115648"><span class="annot"><span class="annottext">MuxBearer m
</span><a href="#local-6989586621679115648"><span class="hs-identifier hs-var">bearer</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-105"></span><span> </span><span id="local-6989586621679115647"><span class="annot"><span class="annottext">Mux mode m
</span><a href="#local-6989586621679115647"><span class="hs-identifier hs-var">mux</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">MiniProtocolBundle mode -> m (Mux mode m)
</span><a href="Network.Mux.Compat.html#muxStart"><span class="hs-identifier hs-var hs-var">muxStart</span></a></span></span><span> </span><span id="local-6989586621679115793"><span class="annot"><span class="annottext">Tracer m MuxTrace
</span><a href="#local-6989586621679115793"><span class="hs-identifier hs-var">tracer</span></a></span></span><span> </span><span id="local-6989586621679115792"><span class="annot"><span class="annottext">MuxApplication mode m a b
</span><a href="#local-6989586621679115792"><span class="hs-identifier hs-var">muxapp</span></a></span></span><span> </span><span id="local-6989586621679115791"><span class="annot"><span class="annottext">MuxBearer m
</span><a href="#local-6989586621679115791"><span class="hs-identifier hs-var">bearer</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-105"></span><span> </span><span id="local-6989586621679115790"><span class="annot"><span class="annottext">Mux mode m
</span><a href="#local-6989586621679115790"><span class="hs-identifier hs-var">mux</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">MiniProtocolBundle mode -> m (Mux mode m)
forall (m :: * -> *) (mode :: MuxMode).
MonadSTM m =>
MiniProtocolBundle mode -> m (Mux mode m)
</span><a href="Network.Mux.html#newMux"><span class="hs-identifier hs-var">newMux</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">MuxApplication mode m a b -> MiniProtocolBundle mode
</span><a href="#local-6989586621679115646"><span class="hs-identifier hs-var">toMiniProtocolBundle</span></a></span><span> </span><span class="annot"><span class="annottext">MuxApplication mode m a b
</span><a href="#local-6989586621679115649"><span class="hs-identifier hs-var">muxapp</span></a></span><span class="hs-special">)</span><span>
</span><a href="#local-6989586621679115789"><span class="hs-identifier hs-var">toMiniProtocolBundle</span></a></span><span> </span><span class="annot"><span class="annottext">MuxApplication mode m a b
</span><a href="#local-6989586621679115792"><span class="hs-identifier hs-var">muxapp</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-106"></span><span>
</span><span id="line-107"></span><span> </span><span id="local-6989586621679115645"><span class="annot"><span class="annottext">[STM m (Either SomeException ())]
</span><a href="#local-6989586621679115645"><span class="hs-identifier hs-var">resOps</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">[m (STM m (Either SomeException ()))]
</span><span id="line-107"></span><span> </span><span id="local-6989586621679115788"><span class="annot"><span class="annottext">[STM m (Either SomeException ())]
</span><a href="#local-6989586621679115788"><span class="hs-identifier hs-var">resOps</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">[m (STM m (Either SomeException ()))]
-> m [STM m (Either SomeException ())]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
-> m (STM m (Either SomeException a))
</span><a href="Network.Mux.html#runMiniProtocol"><span class="hs-identifier hs-var">runMiniProtocol</span></a></span><span>
</span><span id="line-109"></span><span> </span><span class="annot"><span class="annottext">Mux mode m
</span><a href="#local-6989586621679115647"><span class="hs-identifier hs-var">mux</span></a></span><span>
</span><a href="#local-6989586621679115790"><span class="hs-identifier hs-var">mux</span></a></span><span>
</span><span id="line-110"></span><span> </span><span class="annot"><span class="annottext">MiniProtocolNum
</span><a href="#local-6989586621679115643"><span class="hs-identifier hs-var">miniProtocolNum</span></a></span><span>
</span><a href="#local-6989586621679115786"><span class="hs-identifier hs-var">miniProtocolNum</span></a></span><span>
</span><span id="line-111"></span><span> </span><span class="annot"><span class="annottext">MiniProtocolDirection mode
</span><a href="#local-6989586621679115642"><span class="hs-identifier hs-var">ptclDir</span></a></span><span>
</span><a href="#local-6989586621679115785"><span class="hs-identifier hs-var">ptclDir</span></a></span><span>
</span><span id="line-112"></span><span> </span><span class="annot"><span class="annottext">StartOnDemandOrEagerly
</span><a href="Network.Mux.html#StartEagerly"><span class="hs-identifier hs-var">StartEagerly</span></a></span><span>
</span><span id="line-113"></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span id="local-6989586621679115640"><span class="annot"><span class="annottext">Channel m
</span><a href="#local-6989586621679115640"><span class="hs-identifier hs-var">a</span></a></span></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-114"></span><span> </span><span id="local-6989586621679115639"><span class="annot"><span class="annottext">()
</span><a href="#local-6989586621679115639"><span class="hs-identifier hs-var">r</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">Channel m -> m ()
</span><a href="#local-6989586621679115638"><span class="hs-identifier hs-var">action</span></a></span><span> </span><span class="annot"><span class="annottext">Channel m
</span><a href="#local-6989586621679115640"><span class="hs-identifier hs-var">a</span></a></span><span>
</span><span id="line-113"></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span id="local-6989586621679115783"><span class="annot"><span class="annottext">Channel m
</span><a href="#local-6989586621679115783"><span class="hs-identifier hs-var">a</span></a></span></span><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-114"></span><span> </span><span id="local-6989586621679115782"><span class="annot"><span class="annottext">()
</span><a href="#local-6989586621679115782"><span class="hs-identifier hs-var">r</span></a></span></span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">Channel m -> m ()
</span><a href="#local-6989586621679115781"><span class="hs-identifier hs-var">action</span></a></span><span> </span><span class="annot"><span class="annottext">Channel m
</span><a href="#local-6989586621679115783"><span class="hs-identifier hs-var">a</span></a></span><span>
</span><span id="line-115"></span><span> </span><span class="annot"><span class="annottext">((), Maybe ByteString) -> m ((), Maybe ByteString)
forall (m :: * -> *) a. Monad m => a -> m a
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">()
</span><a href="#local-6989586621679115639"><span class="hs-identifier hs-var">r</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Maybe ByteString
</span><a href="#local-6989586621679115782"><span class="hs-identifier hs-var">r</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Maybe ByteString
forall a. Maybe a
</span><a href="../file:///usr/local/.ghcup/ghc/8.10.7/share/doc/ghc-8.10.7/html/libraries/base-4.14.3.0/src"><span class="hs-identifier hs-var">Nothing</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-comment">-- Compat interface doesn't do restarts</span><span>
</span><span id="line-116"></span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-117"></span><span> </span><span class="hs-glyph">|</span><span> </span><span class="hs-keyword">let</span><span> </span><span class="annot"><a href="Network.Mux.Compat.html#MuxApplication"><span class="hs-identifier hs-type">MuxApplication</span></a></span><span> </span><span id="local-6989586621679115637"><span class="annot"><span class="annottext">[MuxMiniProtocol mode m a b]
</span><a href="#local-6989586621679115637"><span class="hs-identifier hs-var">ptcls</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">MuxApplication mode m a b
</span><a href="#local-6989586621679115649"><span class="hs-identifier hs-var">muxapp</span></a></span><span>
</span><span id="line-118"></span><span> </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="Network.Mux.Compat.html#MuxMiniProtocol"><span class="hs-identifier hs-type">MuxMiniProtocol</span></a></span><span class="hs-special">{</span><span id="local-6989586621679115643"><span class="annot"><span class="annottext">MiniProtocolNum
</span><span id="line-117"></span><span> </span><span class="hs-glyph">|</span><span> </span><span class="hs-keyword">let</span><span> </span><span class="annot"><a href="Network.Mux.Compat.html#MuxApplication"><span class="hs-identifier hs-type">MuxApplication</span></a></span><span> </span><span id="local-6989586621679115780"><span class="annot"><span class="annottext">[MuxMiniProtocol mode m a b]
</span><a href="#local-6989586621679115780"><span class="hs-identifier hs-var">ptcls</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">MuxApplication mode m a b
</span><a href="#local-6989586621679115792"><span class="hs-identifier hs-var">muxapp</span></a></span><span>
</span><span id="line-118"></span><span> </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="Network.Mux.Compat.html#MuxMiniProtocol"><span class="hs-identifier hs-type">MuxMiniProtocol</span></a></span><span class="hs-special">{</span><span id="local-6989586621679115786"><span class="annot"><span class="annottext">MiniProtocolNum
miniProtocolNum :: MiniProtocolNum
miniProtocolNum :: forall (mode :: MuxMode) (m :: * -> *) a b.
MuxMiniProtocol mode m a b -> MiniProtocolNum
</span><a href="#local-6989586621679115643"><span class="hs-identifier hs-var hs-var">miniProtocolNum</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621679115636"><span class="annot"><span class="annottext">RunMiniProtocol mode m a b
</span><a href="#local-6989586621679115786"><span class="hs-identifier hs-var hs-var">miniProtocolNum</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621679115779"><span class="annot"><span class="annottext">RunMiniProtocol mode m a b
miniProtocolRun :: RunMiniProtocol mode m a b
miniProtocolRun :: forall (mode :: MuxMode) (m :: * -> *) a b.
MuxMiniProtocol mode m a b -> RunMiniProtocol mode m a b
</span><a href="#local-6989586621679115636"><span class="hs-identifier hs-var hs-var">miniProtocolRun</span></a></span></span><span class="hs-special">}</span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">[MuxMiniProtocol mode m a b]
</span><a href="#local-6989586621679115637"><span class="hs-identifier hs-var">ptcls</span></a></span><span>
</span><span id="line-119"></span><span> </span><span class="hs-special">,</span><span> </span><span class="hs-special">(</span><span id="local-6989586621679115642"><span class="annot"><span class="annottext">MiniProtocolDirection mode
</span><a href="#local-6989586621679115642"><span class="hs-identifier hs-var">ptclDir</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621679115638"><span class="annot"><span class="annottext">Channel m -> m ()
</span><a href="#local-6989586621679115638"><span class="hs-identifier hs-var">action</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">RunMiniProtocol mode m a b
</span><a href="#local-6989586621679115779"><span class="hs-identifier hs-var hs-var">miniProtocolRun</span></a></span></span><span class="hs-special">}</span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">[MuxMiniProtocol mode m a b]
</span><a href="#local-6989586621679115780"><span class="hs-identifier hs-var">ptcls</span></a></span><span>
</span><span id="line-119"></span><span> </span><span class="hs-special">,</span><span> </span><span class="hs-special">(</span><span id="local-6989586621679115785"><span class="annot"><span class="annottext">MiniProtocolDirection mode
</span><a href="#local-6989586621679115785"><span class="hs-identifier hs-var">ptclDir</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621679115781"><span class="annot"><span class="annottext">Channel m -> m ()
</span><a href="#local-6989586621679115781"><span class="hs-identifier hs-var">action</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph"><-</span><span> </span><span class="annot"><span class="annottext">RunMiniProtocol mode m a b
-> [(MiniProtocolDirection mode, Channel m -> m ())]
</span><a href="#local-6989586621679115635"><span class="hs-identifier hs-var">selectRunner</span></a></span><span> </span><span class="annot"><span class="annottext">RunMiniProtocol mode m a b
</span><a href="#local-6989586621679115636"><span class="hs-identifier hs-var">miniProtocolRun</span></a></span><span>
</span><a href="#local-6989586621679115778"><span class="hs-identifier hs-var">selectRunner</span></a></span><span> </span><span class="annot"><span class="annottext">RunMiniProtocol mode m a b
</span><a href="#local-6989586621679115779"><span class="hs-identifier hs-var">miniProtocolRun</span></a></span><span>
</span><span id="line-120"></span><span> </span><span class="hs-special">]</span><span>
</span><span id="line-121"></span><span>
</span><span id="line-122"></span><span> </span><span class="hs-comment">-- Wait for the first MuxApplication to finish, then stop the mux.</span><span>
MonadTime m, MonadTimer m, MonadMask m) =>
Tracer m MuxTrace -> Mux mode m -> MuxBearer m -> m ()
</span><a href="Network.Mux.html#runMux"><span class="hs-identifier hs-var">runMux</span></a></span><span> </span><span class="annot"><span class="annottext">Tracer m MuxTrace
</span><a href="#local-6989586621679115650"><span class="hs-identifier hs-var">tracer</span></a></span><span> </span><span class="annot"><span class="annottext">Mux mode m
</span><a href="#local-6989586621679115647"><span class="hs-identifier hs-var">mux</span></a></span><span> </span><span class="annot"><span class="annottext">MuxBearer m
</span><a href="#local-6989586621679115648"><span class="hs-identifier hs-var">bearer</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">((Async m () -> m ()) -> m ()) -> (Async m () -> m ()) -> m ()
</span><a href="#local-6989586621679115793"><span class="hs-identifier hs-var">tracer</span></a></span><span> </span><span class="annot"><span class="annottext">Mux mode m
</span><a href="#local-6989586621679115790"><span class="hs-identifier hs-var">mux</span></a></span><span> </span><span class="annot"><span class="annottext">MuxBearer m
</span><a href="#local-6989586621679115791"><span class="hs-identifier hs-var">bearer</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">((Async m () -> m ()) -> m ()) -> (Async m () -> m ()) -> m ()