set a 3
expr {$a+1} ; # a's internal rep is now int
lindex $a 0 ; # a's internal rep is now a list, int is lost
(obviously this might be a semantic error, but you can (too) easily
construct semantically valid tcl scripts which will involve repeated
objects internal rep shimmering (in loops...)))
set f [open "x.txt"]
expr {$f+1}
would error out saying that 'f' is a "file" object which
can't be evaluated as an expression (ideally at compile time);
Likewise for some string<->list silent conversions.
(maybe you'd want a perl'ish flag to automatically enable translation
from types to types, maybe even on by default (for backward compatibility)
but having built in (early) type checking would greatly improve
the reliability of scripts (not counting security).Also I don't think Incr Tcl for instance removes the soul of Tcl... I'd rather say it lifts it.