Haskell ならモナドでやるよ、ってことで >>182 を書いたんだけどな……。 >>= は演算子で、 Monad a => a b -> (b -> a c) -> a c の型を持つ。ちょっ とわかりづらいけど、初期の値を順に関数に通して結果を得るための演算子だ と考えてくれていい。
他にも、関数のリストを作って畳み込むことで結果を得るという考え方もある と思う。ステートが違うだけで同じ型の変数であると考えれば、 風呂 = foldl apply 空風呂 [ 水を入れる, 点火, 火を止める ] where apply :: a -> (a -> b) -> b apply x f = f x とかね。
もちろん、 Haskell にも do 〜 のような述語があるし、 ML 系にも begin 〜 end が(たしか)あるから、手続的に書こうと思えば割と 簡単に書けるよ。