• Design choices
  • All vars must have annotated static types
  • Type checking is separate to compilation and must be explicitly run
  • All function arguments need to be annotated, or default to Any
  • Everything is type checked, but core.typed can ignore certain expressions
  • Debugging
  • print-env is your friend
  • Use cf to experiment at the REPL
  • Use ann-form to ensure expressions are particular types
  • core.typed understands assertions and conditionals
  • Typing core constructs
  • core.typed understands datatype definitions
  • Use defprotocol> instead of defprotocol
  • core.typed understands simple multimethods
  • Macros & Macro Definitions
  • Type Syntax
  • Types use the current global scope of the namespace