Snap.Extension.Heist.Impl contains the only implementation of this interface
and can be used to turn your application's monad into a MonadHeist.

MonadHeist is unusual among Snap extensions in that it's a multi-parameter
typeclass. The last parameter is your application's monad, and the first is
the monad you want the TemplateState to use. This is usually, but not
always, also your application's monad.