# Types in phase 1?

**URL:** <https://racket.discourse.group/t/types-in-phase-1/4038>\
**Category:** General\
**Created:** [December 8, 2025, 1:45am UTC](https://racket.discourse.group/t/types-in-phase-1/4038 "2025-12-08T01:45:04Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![hendrikboom3](https://avatars.discourse-cdn.com/v4/letter/h/b5e925/32.png) [@hendrikboom3](https://racket.discourse.group/u/hendrikboom3)\
**Post date:** [December 8, 2025, 1:45am UTC](https://racket.discourse.group/t/types-in-phase-1/4038/1 "2025-12-08T01:45:04Z")

</div>

Is there a technical reason why code for phase 1 is in plain Racket, even when phase 0 can be in typed Racket?

---

<div class="post-metadata">

**Author:** ![shhyou](https://avatars.discourse-cdn.com/v4/letter/s/ccd318/32.png) [@shhyou](https://racket.discourse.group/u/shhyou)\
**Post date:** [December 8, 2025, 2:27am UTC](https://racket.discourse.group/t/types-in-phase-1/4038/2 "2025-12-08T02:27:29Z")

</div>

Here is a Typed Racket snippet that is used in phase 1:

```racket
;; print-id.rkt
#lang typed/racket/optional

(provide print/id-proc)
(require (for-template racket/base))

(: print/id-proc (-> Syntax (Syntaxof Any)))
(define (print/id-proc stx)
  (define d (syntax-e stx))
  (cond
    [(and (pair? d) (pair? (cdr d)) (identifier? (cadr d)))
     (with-syntax ([id (cadr d)])
       #'(printf '"print/id-proc: value of ~s is ~s\n" 'id id))]
    [else #'(begin)]))

```

And its client:

```racket
#lang racket/base

(require (for-syntax racket/base "print-id.rkt"))

(define-syntax print/id print/id-proc)

(define x 123)

(print/id x)

```

The types of `print/id-proc` are indeed statically checked, although typing it isn't very convenient. Of course, its interaction with the untyped code is not guarded. Is this related to what you are asking?
