pull the monad section out into its own file