anchor.diff:       environment)))
   
   (defun make-operation-method (task-var task-class chain-var method-lambda initialisation-arguments)
  +  "Create a method for the PERFORM-OPERATION function. 
  +
  +TASK-VAR is the name of the argument that will be bound to the
  +instance of TASK-CLASS.
  +
  +CHAIN-VAR is the name of the argument that will be bound the chain.
  +
  +TASK-CLASS is the class of the task the method is for.
  +
  +METHOD-LAMBDA is the :FUNCTION initialisation argument for the method.
  +
  +INITIALISATION-ARGUMENTS are any other initialisation arguments for
  +the new method object.
  +
  +See the macro DEFINE-OPERATION on how to use this function correctly."
  +  (declare (type task-class task-class))
  +  (assert (closer-mop:subclassp task-class (find-class 'task)))
     (let ((gf (ensure-generic-function 'perform-operation)))
       (apply #'make-instance (closer-mop:generic-function-method-class gf)
   	   :specializers (list task-class (find-class t))
  
positive.code: 
  (defun make-operation-method-lambda (task-var task-input-vars task-inputs chain-var body environment)
    "Create a method lambda that will be used for a method added to the
    PERFORM-OPERATION generic function. The resulting method added akin to
    the method lambda created when evaluating the following DEFMETHOD
  
    `(let ((#:task-inputs ',task-input-classes))
       (defmethod perform-operation ((,task-var ,task-class) #:chain)
         (destructuring-bind ,task-input-vars
             (obtain-task-inputs #:chain (class-of ,task-var) #:task-input-classes)
           ,@body))))
  
    Note that the TASK-CLASS above is not used in
    MAKE-OPERATION-METHOD-LAMBDA. It is however used in MAKE-OPERATION-METHOD.
  "
    (let ((gf (ensure-generic-function 'perform-operation)))
      (closer-mop:make-method-lambda
  
negative.code: 	(chain-var (gensym)))
      (multiple-value-bind (method-lambda initialisation-arguments)
  	(make-operation-method-lambda task-var task-input-vars task-inputs chain-var body env)
        `(let ((m (make-operation-method ',task-var
  				       (find-class ',task-class)
  				       ',chain-var
  				       (function ,method-lambda)
  				       ',initialisation-arguments)))
  	 (ensure-operation m)))))
  