Question

How does one declare a type to have a “default” initial value, say a type tagged with {:extern}?

Answer

There is no general way to do this. Subset types and newtypes have witness clauses and types that are auto-initializable have a default, but those rules do not apply to anonymous extern types. Particularly for abstract types, there is not even a way to infer such a value.

You can manually initialize like this:

type {:extern} TT {
}
function {:extern} init(): TT

method mmm() {
  var x: TT := init();
  var y:= x;
}