macrotypes/tapl/stlc+lit.rkt
2015-06-10 15:56:27 -04:00

26 lines
615 B
Racket

#lang racket/base
(require "typecheck.rkt")
(require "stlc.rkt")
(provide (all-from-out "stlc.rkt"))
(provide (rename-out [datum/tc #%datum]))
;; Simply-Typed Lambda Calculus, plus numeric literals and primitives
;; Types:
;; - types from stlc.rkt
;; - Int
;; Terms:
;; - terms from stlc.rkt
;; - numeric literals
;; - prim +
(define-base-type Int)
(define-primop + : ( Int Int Int))
(define-syntax (datum/tc stx)
(syntax-parse stx
[(_ . n:integer) ( (syntax/loc stx (#%datum . n)) #'Int)]
[(_ . x)
#:when (type-error #:src #'x #:msg "Unsupported literal: ~v" #'x)
#'(#%datum . x)]))