# Dsl The `Prelude.>>=` combinator limits the return type as a `m b`, which cause Monads not composable. In order to ease this restrictions, this proposal introduces another type class `Dsl` for do notation. Motivation ---------- Monads do not compose. Normally a `do` block cannot contains operators defined in different monad instances. The state of art solution is [using only one monad](http://okmij.org/ftp/Haskell/extensible/) `Eff`, which forwards all monadic bind operations to custom effect handlers, instead of defining new monads. However, the `Eff` approach is heavy weight than ordinary monad. It's not very convenient to create an additional indirect layer for simple use cases. The `Eff` approach of bypassing `>>=` combinator is quite embarrassing. Since `>>=` settles on our logo, In this proposal we present a new approach to enable multiple operations at once by improving `>>=`. This proposal aims to port the approach used in [Dsl.scala](https://github.com/ThoughtWorksInc/Dsl.scala) to Haskell. This approach improves the extensibility of `>>=`.