Right, but MAKE-anything is clearly a constructor.
STRING is more like COERCE, and (lambda () (coerce '(1 2) 'list)) does not call coerce, it just returns the constant.
Is the bottom line that you would agree or disagree with folding the single-character case?

On Fri, Jun 13, 2014 at 2:00 PM, Stas Boukarev <stassats@gmail.com> wrote:
Douglas Katzman <dougk@google.com> writes:

> interesting point. I think one could argue that the dumping/restoring of
> the second argument to EQL was permitted to find and return any symbol in
> the image that was similar-as-constant. So in fact the answer might have
> been T even if (string 'foo) was not compile-time folded.
> Your point holds even for the character-to-string-of-length-1 but all the
> same I think it's on firmer ground to fold (string #\a) => "a" because
> "returns a string" doesn't preclude that there might be a cache of
> single-character strings whose codes are in the range of base-char, and
> that the string could come from that cache. And that any one-character
> string appearing as a constant in code might also come from the cache.
> If nothing else, we should make (string "foo") an identity.
For make-string it also says "returns a simple string", but nobody would
dare to fold that.

With best regards, Stas.