prepare for introducing application monad
implement extension system