5 questions to test your understanding
A variable typed as `any` holds a string value. It is then passed to a function with the signature f(x: int) -> string. When does the type error surface?
How does the 'consistency' relation in gradual typing differ from conventional subtyping?
In a gradual type system, passing an `any` value into a statically typed function parameter requires a runtime type check inserted by the compiler at the boundary between typed and untyped code.
Gradual typing eliminates type errors in partially-typed code because the `any` type is compatible with everything — code that uses `any` cannot fail due to type mismatches.
What is the 'blame problem' in gradual typing, and why does it matter in large codebases that mix typed and untyped code?