{"size": 1465, "ext": "scrbl", "max_stars_repo_path": "turnstile-doc/turnstile/scribblings/turnstile.scrbl", "max_stars_repo_name": "drsooch/macrotypes", "max_stars_repo_stars_event_min_datetime": "2017-01-27T05:56:09.000Z", "max_stars_repo_stars_event_max_datetime": "2022-03-09T09:26:12.000Z", "max_issues_repo_path": "turnstile-doc/turnstile/scribblings/turnstile.scrbl", "max_issues_repo_name": "drsooch/macrotypes", "max_issues_repo_issues_event_min_datetime": "2017-01-31T15:37:50.000Z", "max_issues_repo_issues_event_max_datetime": "2021-12-30T02:23:50.000Z", "max_forks_repo_path": "turnstile-doc/turnstile/scribblings/turnstile.scrbl", "max_forks_repo_name": "drsooch/macrotypes", "max_forks_repo_forks_event_min_datetime": "2017-03-22T17:20:40.000Z", "max_forks_repo_forks_event_max_datetime": "2021-09-01T11:31:16.000Z"}
{"max_stars_count": 115, "max_issues_count": 90, "max_forks_count": 15, "avg_line_length": 38.5526315789, "max_line_length": 80, "alphanum_fraction": 0.733105802}
#lang scribble/manual

@(require (for-label racket/base))

@title[#:style '(toc)]{The @racketmodname[turnstile] language}

@defmodule[turnstile #:lang #:use-sources (turnstile)]

@(author
  (author+email "Stephen Chang" "stchang@racket-lang.org" #:obfuscate? #t)
  (author+email "Alex Knauth" "alexander@knauth.org" #:obfuscate? #t)
  (author+email "Ben Greenman" "types@ccs.neu.edu" #:obfuscate? #t)
  (author+email "Milo Turner" "iitalics@gmail.com" #:obfuscate? #t)
  (author+email "Michael Ballantyne" "mballantyne@ccs.neu.edu" #:obfuscate? #t))

Turnstile aims to help Racket programmers create typed languages. It does so
with extensions of Racket's macro-definition forms that facilitate
implementation of type rules alongside normal macro code. As a result, the
macros implementing a new language directly type check the program during
expansion, obviating the need to create and call out to a separate type checker.
Thus, a complete typed language implementation remains a series of macro
definitions that may be imported and exported in the standard way that Racket
programmers are accustomed to.

@local-table-of-contents[]

@include-section{guide.scrbl}
@include-section{reference.scrbl}
@include-section{rackunit-turnstile.scrbl}

@(bibliography 
  (bib-entry #:key "bidirectional"
             #:author "Benjamin C. Pierce and David N. Turner"
             #:title "Local Type Inference"
             #:location "POPL"
             #:date "1998")
  )
