A wrapper type that can be used to embed an arbitrary restricted monad as a normal monad.
Note that in general there can be an efficiency loss in using
AsMonad where the underlying restricted monad could have been used
instead. For example when using
AsMonad, intermediate results
will not have duplicates removed. On the other hand, it becomes legal
to use intermediate results that do not have