UNB/ CS/ David Bremner/ teaching/ cs4613/ lectures/ lecture7/ snippet-001.rkt
#lang plait
(define-type FLANG
  [Num  (val : Number)]
  [Add  (l : FLANG) (r : FLANG)]
  [Sub  (l : FLANG) (r : FLANG)]
  [Mul  (l : FLANG) (r : FLANG)]
  [Div  (l : FLANG) (r : FLANG)]
  [Id   (name : Symbol)]
  [Let1 (id : Symbol) (named-expr : FLANG) (bound-body : FLANG)]
  [Lam  (param : Symbol) (body : FLANG)]
  [Call (fun : FLANG) (val : FLANG)]) ; first type!

;; a type for substitution caches:
(define-type Binding
  [bind (name : Symbol) (val : FLANG)])
(define-type-alias SubstCache (Listof Binding))