Looking at it again, I think you might be right - any default filter is going to miss stuff, and cause unexpected data loss. Also, the more we do catch, the greater the runtime penalty. (If you think about it, filtering input to be 'safe' for a computation almost canonically maps to the halting problem... ) So I think I was too hasty to think this could be done easily, sorry for being so vociferous...
So the options other than that would be a) Forcing every access to have an explicit type mentioned b) The current situation - filter if you like I wouldn't mind either, but I can see a) being worked around anyway. I guess we should just aim to provide a set of targeted filters for particular things.