monads in functional programming#do-notation