When you write them in the order you want, you're implicitly chaining them with a primitive chain operator that's built-into the language.
In Haskell, this is exactly what "do" notation does. So in what sense is it "overcomplicated"?
Example, Python:
def func(x, y, z): foo(x()) otherFunc(lambda : y.hello(z))
func x y z = do foo =<< x otherFunc (hello y z)
When you write them in the order you want, you're implicitly chaining them with a primitive chain operator that's built-into the language.
In Haskell, this is exactly what "do" notation does. So in what sense is it "overcomplicated"?
Example, Python:
Haskell: The syntax is slightly more verbose for chaining actions as arguments (foo), but more concise when passing around first-class actions (hello).