(define (domain hippo)
   (:function (hippo-num) - Integer)
    
   (:action count-hippos
       :parameters ()
       :value (n - Integer)
       :effect (know-val (hippo-num)
			 n)))


;expands to this:

(define (domain hippo)
   (:function (hippo-num) - Integer)
    
   (:action count-hippos
       :parameters ()
       :value (n - Integer)
       :effect (know-val (hippo-num)
			 (step-value this-step))))

where this occurrence of (step-value this-step) has type Integer

While type checking effect, this-step has type (Step (Tup n - Integer))

step-value has type (Fun u <- (Step !& u))

Suppose you had

   :value (n m - Integer)
   :effect (and (know-val (foo-n) n)
		(know-val (foo-m) m))


--->

    :effect (and (know-val (foo-n) (car (step-value this-step)))
		 (know-val (foo-m) (cadr (step-value this-step))))

I.e., if :value is an arglist, just treat it as (Tup ...).

