I read a lot about how the categorical idea of a monad is used to model computations with side effects in Haskell. On the other hand, looking up monad in e.g. Mac Lane's Categories for the Working Mathematician shows it to be an abstract general concept. Can anyone here give a small "elevator talk" explaining just the gist of how this abstract idea applies to computational side effects?