# File lib/mindi.rb, line 153
    def deferred(name, &impl)  # :yields:
      impl_name = Container.impl_method_name(name)
      define_method(impl_name, &impl)
      
      proxy_name = Container.impl_method_name("#{name}_proxy")

      ivname = Container.iv(name)
      proxy_ivname = Container.iv("#{name}_proxy")
      
      define_method(name) do
        instance_variable_get(ivname) || send(proxy_name)
      end
      
      define_method(proxy_name) do
        proxy = instance_variable_get(proxy_ivname)
        
        unless proxy
          proxy = proc {instance_variable_set(ivname, send(impl_name))}
          def proxy.method_missing(*args, &block)
            call.__send__(*args, &block)
          end
          instance_variable_set(proxy_ivname, proxy)
          class << proxy; self; end.class_eval do
            (proxy.methods - PROXY_METHODS).each do |m|
              undef_method m
            end
          end
        end

        proxy
      end
    end