      (pcase cond
        (`(value ,value)
         (if value
-            (list 'partial `(progn ,@(mapcar #'cl-second body)))
+            body
           (list 'value nil)))
-       (`(partial ,_)
+       (`(partial ,form)
         (list 'partial
-              `(when ,(cl-second cond)
-                 ,@(mapcar #'cl-second body))))))
+              `(when ,form
+                 ;; body looks like (progn BODY...), so strip the progn.
+                 ,@(cdr body))))))
     (`(unless ,cond . ,body)
      (setq cond (whatif--simplify cond bindings))
      (setq body (whatif--simplify-progn-body body bindings))

     (if (assoc form bindings)
         (list 'value (alist-get form bindings))
       (list 'partial form)))
    (`(if ,cond ,then)
     (whatif--simplify `(if ,cond ,then nil) bindings))
    (`(if ,cond ,then ,else)

       (`(partial ,_)
        (list 'partial
              `(if ,(cl-second cond) ,(cl-second then) ,(cl-second else))))))

    ;; Remove pointless values in progn, e.g.
    ;; (progn nil (foo) (bar)) -> (progn (foo) (bar))
    (`(progn . ,exprs)
     (whatif--simplify-progn-body exprs bindings))
    
    (`(when ,cond . ,body)
     (setq cond (whatif--simplify cond bindings))
