       (`(value ,value)
        (push (list 'value value) simplified-exprs)))
     (nreverse simplified-exprs)))
+
+(defun whatif--values-p (forms)
+  "Do all FORMS represent values?"
+  (--all-p (eq (car it) 'value) forms))
 
 (defun whatif--simplify (form bindings)
   "Simplify FORM in the context of BINDINGS using partial application.

(require 'cl-lib)

(defun whatif--source (fn-symbol)
  "Get the source of function named FN-SYMBOL as an s-expression."

(ert-deftest simplify--known-fn-call ()
  "If we know we're calling a function, we should simplify its
arguments."
  ;; Function with side effects.
  (should
   (equal
    (whatif--simplify '(message x) '((x . 1)))
    (list 'partial '(message 1))))
  (should
   (equal
    (whatif--simplify '(+ x 2) '((x . 3)))
    (list 'value 5))))

(ert-deftest simplify--unknown-fn-call ()
  "If we don't recognise the symbol, do nothing."
  (should
   (equal
