user5264: Given a do block which contains these expressions:
void $ submitTx tx
payContract

Would it be feasible to reformat this lines using the then operator, and thus telling the compiler to do something, ignore the output and proceed to do something else? Something like:
submitTx tx >> payContract

If so, what are the benefits of using one over the other? Is any option considered a good or bad practice?

user1130: Usually you don't see >>= (bind) and >> (then) inside do blocks--do gives you a more flexible interface with monads and lets you weave in other logic, as you can see in the function you're referring to:
payContract :: Contract () PaySchema Text ()
payContract = do
    pp <- awaitPromise $ endpoint @"pay" return
    let tx = mustPayToPubKey (ppRecipient pp) $ lovelaceValueOf $ ppLovelace pp
    void $ submitTx tx
    payContract

The advantage of a do block is having a more imperative and readable view into the monad.
I usually associate >>= and >> with monad combination outside of do blocks, but I guess there is no reason you couldn't use them inside the block. Feels like mixing and matching, but maybe that's just me; if you're already inside a do block, you might as well use void, <-, etc

5264: <p>Given a <code>do</code> block which contains these expressions:</p>
<pre><code>void $ submitTx tx
payContract
</code></pre>
<p>Would it be feasible to reformat this lines using the then operator, and thus telling the compiler to do something, ignore the output and proceed to do something else? Something like:</p>
<pre><code>submitTx tx &gt;&gt; payContract
</code></pre>
<p>If so, what are the benefits of using one over the other? Is any option considered a good or bad practice?</p>
 1130: <p>Usually you don't see <code>&gt;&gt;=</code> (bind) and <code>&gt;&gt;</code> (then) inside <code>do</code> blocks--<code>do</code> gives you a more flexible interface with monads and lets you weave in other logic, as you can see in the function you're referring to:</p>
<pre><code>payContract :: Contract () PaySchema Text ()
payContract = do
    pp &lt;- awaitPromise $ endpoint @&quot;pay&quot; return
    let tx = mustPayToPubKey (ppRecipient pp) $ lovelaceValueOf $ ppLovelace pp
    void $ submitTx tx
    payContract
</code></pre>
<p>The advantage of a <code>do</code> block is having a more imperative and readable view into the monad.</p>
<p>I usually associate <code>&gt;&gt;=</code> and <code>&gt;&gt;</code> with monad combination outside of <code>do</code> blocks, but I guess there is no reason you <em>couldn't</em> use them inside the block. Feels like mixing and matching, but maybe that's just me; if you're already inside a <code>do</code> block, you might as well use <code>void</code>, <code>&lt;-</code>, etc</p>
