This post is intended to be a short guide on using MonadBaseControl effectively in Haskell code without understanding it. Tiny synopsis The big idea behind MonadIO m is that you can perform a transformation IO a -> m a. The big idea behind MonadBaseControl is that you can perform a transformation m a -> IO a. Most monads have additional context than just IO, so to go from your custom monad to IO r