The main benefit of these techniques is that it gives you better type-checking: it makes sure that you're only using your monadic values in the hygenic ways you're supposed to. Perhaps you don't care about that. Well, then, if you want to write all your own monadic code, you can proceed as you like. If you ever want to use other people's code, though, or read papers or web posts about monads, you will encounter one or more of these techniques, and so you need to get comfortable enough with them not to let them confuse you.
OK, back to our walk-through of "A State Monad Tutorial". What shall we use for a store? Instead of a plain `int`, let's suppose our store is a structure of two values: a running total, and a count of how many times the store has been modified. We'll implement this with a record. Hence:
The main benefit of these techniques is that it gives you better type-checking: it makes sure that you're only using your monadic values in the hygenic ways you're supposed to. Perhaps you don't care about that. Well, then, if you want to write all your own monadic code, you can proceed as you like. If you ever want to use other people's code, though, or read papers or web posts about monads, you will encounter one or more of these techniques, and so you need to get comfortable enough with them not to let them confuse you.
OK, back to our walk-through of "A State Monad Tutorial". What shall we use for a store? Instead of a plain `int`, let's suppose our store is a structure of two values: a running total, and a count of how many times the store has been modified. We'll implement this with a record. Hence: