    (equal
     (whatif--simplify 't nil)
     (list 'value t))))
+
+(ert-deftest simplify--number ()
+  (should
+   (equal
+    (whatif--simplify 123 nil)
+    (list 'value 123))))
+
+(ert-deftest simplify--keyword ()
+  (should
+   (equal
+    (whatif--simplify :foo nil)
+    (list 'value :foo))))
+
+(ert-deftest simplify--string ()
+  (should
+   (equal
+    (whatif--simplify "foo" nil)
+    (list 'value "foo"))))
 
 (ert-deftest simplify--symbol ()
   (should

   (equal
    (whatif--simplify '(if x y z) '((x . 42)))
    (list 'unknown 'y))))

  "Simplify FORM in the context of BINDINGS using partial application.
Loops are not executed and side-effecting functions are not run."
  (pcase form
    ;; nil and t evaluate to themselves.
    (`nil (list 'value nil))
    (`t (list 'value t))
    ;; Literal keywords, strings and numbers evaluate to themselves.
    ((pred keywordp)
     (list 'value form))
    ((pred stringp)
     (list 'value form))
    ((pred numberp)
     (list 'value form))
    ;; We can evaluate a symbol if it is present in BINDINGS.
    ((pred symbolp)
     (if (assoc form bindings)
         (list 'value (alist-get form bindings))
