Yes that’s exactly what the Maybe monad does! It would look like this in Haskell code
doStuff :: Maybe X
doStuff = do
r1 <- cmd1
r2 <- cmd2 r1
…
return rX
Which is syntactic sugar for: doStuff = cmd1 >>= cmd2 >>= …