implementation is extracted to Impl hidden module.