3 ms·
I misread this sentence the first couple times. Note that it isn't saying that Typed Racket only catches type errors at runtime, i.e. that it's a runtime type
by tomjakubowski 9y ago
I misread this sentence the first couple times. Note that it isn't saying that Typed Racket only catches type errors at runtime, i.e. that it's a runtime type checker or a "contracts" implementation; it's saying that it—statically, and ahead of time—checks that expressions that would be evaluated at runtime have the correct types. (NB: as the caveats section notes, macro expansions are still statically type checked in Typed Racket)
What makes you see this as a caveat relative to Haskell? I can't imagine most Racket users typically deal with macros at such a low level; don't Schemers tend to use syntax-rules?
https://docs.racket-lang.org/guide/proc-macros.html https://docs.racket-lang.org/guide/proc-macros.html
- shakna 9y agoUsing things like begin-for-syntax for compile-time evaluation isn't unusual for things like optimisation, but it'd bypass Typed Racket's safety here. And usually, you don't need to care if what you're calling is a macro or a procedure. Now you do.
- alphaalpha101 9y ago>And usually, you don't need to care if what you're calling is a macro or a procedure. Now you do. You always do, because macros can change evaluation semantics and procedures cannot.
- wtetzner 9y ago> but it'd bypass Typed Racket's safety here. Sort of, but the expansion of any macros is still type-checked.
- samth 9y agoIt doesn't bypass safety -- all code that's actually run is typechecked. It's just that we don't enforce anything about the macro itself, so the macro might error or produce code that results in a type error.