#lang plai-typed (require "typed-lang2.rkt") (define-type Cell [cell (location : Location) (value : ValueC)]) (define-type-alias Store (listof Cell)) (define-type Result [v*s (value : ValueC) (store : Store)]) (define (interp-full [exprC : ExprC] [env : Env] [store : Store]) : Result (type-case ExprC exprC [NumC (n) (v*s (NumV n) store)] [else (interp-error (string-append "Haven't covered a case yet:" (to-string exprC)))])) (define (interp [exprC : ExprC]) : ValueC (type-case Result (interp-full exprC empty empty) [v*s (value store) value]))