From the top of my head I can name only convinience and reasoning. You always have to explicitly return Pair(State, Effect) (or State to Effect) , even when you don't have effects, or state changes(or use some helper functions). Alternatevily, you can return Next.state(..) or Next.effect(..) or smtg like that.