Provides the general framework for monads.