    # File lib/facets/more/inheritor.rb, line 55
      def inheritor( key, obj, op=nil )

        # inhertiance operator
        op = op ? op.to_sym : :add

        # inheritor store a this level
        instance_variable_set("@#{key}", obj)

        #base = self
        deflambda = lambda do

          define_method( key ) do
            defined?(super) ? super.__send__(op,obj) : obj.dup
          end

          define_method( "#{key}!" ) do
            instance_variable_get("@#{key}") || inheritor( key, obj.class.new, op )
            #if instance_variables.include?("@#{key}")
            #  instance_variable_get("@#{key}")
            #else
            #  if self != base
            #    inheritor( key, obj.class.new, op )
            #  end
            #end
          end
        end

        # TODO This is an issue if you try to include a module
        # into Module or Class itself. How to fix?

        # if the object is a module (not a class or other object)
        if self == Class or self == Module
          class_eval &deflambda
        elsif is_a?(Class)
          (class << self; self; end).class_eval &deflambda
        elsif is_a?(Module)
          #class_inherit &deflambda
          extend class_extension( &deflambda )
        else # other Object
          (class << self; self; end).class_eval &deflambda
        end

        obj
      end