diff --git a/typed-parse.rkt b/typed-parse.rkt new file mode 100644 index 0000000..363d9e0 --- /dev/null +++ b/typed-parse.rkt @@ -0,0 +1,6 @@ +#lang typed/racket/base +(require "typed-structs.rkt") +(require/typed "parse.rkt" + [parse (Any -> Expression)]) + +(provide parse) \ No newline at end of file diff --git a/typed-structs.rkt b/typed-structs.rkt new file mode 100644 index 0000000..e123ae1 --- /dev/null +++ b/typed-structs.rkt @@ -0,0 +1,19 @@ +#lang typed/racket/base +(provide (all-defined-out)) + +(define-type Expression (U Constant Quote Var Assign Branch Def Lam Seq App)) +(define-struct: Constant ([v : Any]) #:transparent) +(define-struct: Quote ([v : Any]) #:transparent) +(define-struct: Var ([id : Symbol]) #:transparent) +(define-struct: Assign ([id : Symbol] + [expr : Expression]) #:transparent) +(define-struct: Branch ([test : Expression] + [consequent : Expression] + [alternative : Expression]) #:transparent) +(define-struct: Def ([id : Symbol] + [expr : Expression]) #:transparent) +(define-struct: Lam ([ids : (Listof Symbol)] + [body : Expression]) #:transparent) +(define-struct: Seq ([es : (Listof Expression)]) #:transparent) +(define-struct: App ([op : Expression] + [rands : (Listof Expression)]) #:transparent)