Typecheck
Reusable typeCheck handlers: strict (throw), collecting (accumulate), logging (record all).
collecting
Collecting typeCheck handler: accumulates errors in state.
Resumes with true on success, false on failure (computation continues).
State shape: list of { context, typeName, actual, message }
Initial state: []
logging
Logging typeCheck handler: records every check (pass or fail) in state. Always resumes with the actual check result (boolean).
State shape: list of { context, typeName, passed }
Initial state: []
strict
Strict typeCheck handler: throws on first type error. Resumes with true on success (check passed).
Use when type errors should halt evaluation immediately. State: unused (pass null).