;;; $Id$

(defrep parsed-exp datum)

(deftype make-varref (-> (symbol) parsed-exp))
(deftype varref? (-> (parsed-exp) boolean))
(deftype varref->var (-> (parsed-exp) symbol))

(deftype make-lit (-> (number) parsed-exp))
(deftype lit? (-> (parsed-exp) boolean))
(deftype lit->datum (-> (parsed-exp) number))
  
(deftype make-app (-> (parsed-exp (list parsed-exp)) parsed-exp))
(deftype app? (-> (parsed-exp) boolean))
(deftype app->rator (-> (parsed-exp) parsed-exp))
(deftype app->rands (-> (parsed-exp) (list parsed-exp)))

(deftype make-if (-> (parsed-exp parsed-exp parsed-exp) parsed-exp))
(deftype if? (-> (parsed-exp) boolean))
(deftype if->test-exp (-> (parsed-exp) parsed-exp))
(deftype if->then-exp (-> (parsed-exp) parsed-exp))
(deftype if->else-exp (-> (parsed-exp) parsed-exp))

(deftype make-when (-> (parsed-exp parsed-exp) parsed-exp))
(deftype when? (-> (parsed-exp) boolean))
(deftype when->test (-> (parsed-exp) parsed-exp))
(deftype when->body (-> (parsed-exp) parsed-exp))
