               (reader/read-string exp)
               exp)
         final (list '= (get clause "name") exp)]
-    [(list '= (get clause "name" 'x) exp)]))
+    [(denotation/Let. (get clause "name" 'x) exp)]))
 
 (defmethod compile-clause "change" [clause world]
   (let [rule (get-in @state [:madlibs (:ml clause)])

        ui-facts (try
                   (reader/read-string ui)
                   (catch :default e))]
    [(list '+s (if-not ui-facts
                 []
                 `(hiccup ~ui-facts)))]
    ))

(defn compile-rule* [r world]
  (mapcat compile-clause (:clauses r)))

(defn compile-rule [r world]
  (aurora.language.macros/macroless-rule (vec (compile-rule* r world))))

(defn compile-fact [f world]
  (dissoc f :type))

        syms (into {} (for [k (keys (dissoc clause :ml))]
                        [k (gensym k)]))
        sees (for [[k v] (dissoc clause :ml)]
               (denotation/Let. (syms k) (if (string? v)
                                           (reader/read-string v)
                                           v)))
        jsd (into clause (for [[k v] (dissoc clause :ml)]
                           [k (syms k)]))
        ]
    (conj sees
          (denotation/Filter. (merge clause placeholders))
          (denotation/Retract. (merge clause placeholders new-bound-syms))
          (denotation/Assert. (merge placeholders clause new-bound-syms jsd)))
    )
  )

