A map keyed by a type variable cannot be put into inside a generic body: the hash and the equality are concrete symbols chosen from the concrete key type, and there is none until the copy exists. The refusal now says that, and says what hashable? does buy - taking and returning a (Map $t V) - rather than leaving the reader to infer it. Closing the hole means adding the map operations to the list of forms the abstract pass defers to instantiation. That list is print and println and nothing else, and every member is a place where a refusal moves from the definition to a call site, which is what the abstract pass exists to prevent. Two is short enough to hold in your head. Also written down: four of the prelude's copyable? declarations are convention rather than checker-enforced. The move analysis tracks locals, not reads out of a slice, so swap! and friends check without it - and would still duplicate a header at [(Vec i32)].
Description
Languages
OCaml
67.2%
Emacs Lisp
15.2%
C
10.4%
HTML
2.9%
Standard ML
2.8%
Other
1.5%