In short, concatenative languages behave in a way which looks imperative (like C or Perl), but can be reasoned about in a functional manner (like ML or Haskell).
These languages are only beginning to be studied, although Forth had a heyday in the 80s, and Postscript is notable for being the most commonly metaprogrammed language in existance (a trait which I believe is not a coincidence).
Before I start: http://citeseer.ist.psu.edu/dornan98typesecure.html seems to possibly have something to do with this (maybe?). It's about using dynamic types
... That is what I mean. Say you give a macro a quotation. That quotation type checks. Now say the macro tears the quotation apart, and one of the individual
... I can read this okay up until the phrase "obviously not in the source code." Then I get completely lost. I'm going to reduce the argument to a logical form
... Ah, I misunderstood. I thought you were thinking that Fifth was lazy and somehow needed the effect system to avoid stomping all over itself when IO was
... Are you saying that it's impossible to write an optimizing code generator for Fifth? :-) Seriously, though, I don't see why you should worry about 'effects