Go use Haskell, it's got all the nice syntax you want
-- C-like syntax -- do { x <- getX; y <- getY; return (x+y); } -- or Python-like syntax -- do x <- getX y <- getY return (x+y)
and the pure vs. action distinction
do x <- runThisParameterlessAction -- which is very different syntactically from -- let y = getSomePropertyOf z return (x+y)
Of course, the common way to write the first block of code is actually
liftM2 (+) getX getY
Anyways, syntax is silly.