    # File lib/facets/core/module/namespace.rb, line 25
      def namespace( name, mod=nil, &blk )

        # If block is given then create a module, otherwise
        # get the name of the module.
        if block_given?
          name = name.to_s
          raise ArgumentError if mod
          mod  = Module.new(&blk)
        else
          if Module === name
            mod = name
            name = mod.basename.downcase
          end
          mod  = mod.dup
        end

        # Include the module. This is neccessary, otherwise
        # Ruby won't let us bind the instance methods.
        include mod

        # Save the instance methods of the module and
        # replace them with a "transparent" version.
        methods = {}
        mod.instance_methods(false).each do |m|
          methods[m.to_sym] = mod.instance_method(m)
          mod.instance_eval do
            define_method(m) do
              super
            end
          end
        end

        # Add a method for the namespace that delegates
        # via the Functor to the saved instance methods.
        define_method(name) do
          Functor.new(methods) do |op, mtab, *args|
            mtab[op].bind(self).call(*args)
          end
        end
      end