If functions foo, bar, baz are pure, then: fun = do put [] x <- get >>= State $ foo 1 y <- get >>= State $ bar x z <- get >>= State $ baz x y -- View this message in context: http://haskell.1045720.n5.nabble.com/Proposal-Non-recursive-let-tp5732690p5732778.html Sent from the Haskell - Haskell-prime mailing list archive at Nabble.com.