I've never been quite on board with the FILE! datatype.
It displeased me that it was just a string, you couldn't really do too much with it. Not a lot of magic. It's burdened by representations of spaces in it, and hard to really say it gives coverage of any incoming file string.
Sample Rebol2 session on Windows:
>> cd /
== %/
>> ls
c/ d/
>> cd c
== %/c/
>> cd "Program Files"
== %/c/Program%20Files/
Are we really in the "actually good" territory of a problem space that can be reasonably tackled? If I'm a Windows user, I'd rather see that as {C:\Program Files} in my config files or scripts any day of the week.
I've Advocated Building on "NewPath"
"NewPath" was able to do things like /foo/bar
or baz/mumble/
). I advocated that FILE! build on that.
Now that we can have more basic types, I'm thinking that sounds pretty cool:
%foo ; FILE-WORD!
%foo.c ; FILE-TUPLE!
%1-foo.txt ; FILE-FUSED!
%foo/bar/baz.txt ; FILE-PATH!
%["C:\File With\Spaces.txt"] ; FILE-BLOCK!
You've got your coherence...enforcement of not having doubled-up slashes...able to use COMPOSE and such...
>> dir: %foo/bar/
>> compose %(dir)/baz.txt
== %foo/bar/baz.txt
We could build the calculus-of-slashes that I've been demanding, so everything is on board with what's a directory and what's a file.
>> dir: %foo/bar
>> compose %(dir)/baz.txt
** Error: compose into FILE-PATH! needs ending slash in non-terminal slot
And basically, we could punt on the question of how to deal with obnoxious filenames by telling people "if you aren't going to name your files like a sane person, use a string." Spaces in filenames is one of the worst ideas ever, and I don't mind making those second-class citizens if it means we get good properties.
And of course, more parts for dialecting.
This Would Intern a lot of Random Strings
One downside here is that if you have a bunch of filenames of varying lengths, and you make them these symbolic structures instead of just keeping them as strings, you'll explode the symbol table.
That seems like an argument to say that if you're making some kind of database where these scale problems are going to affect you, you might should use string instead.
That's just a general truth--while WORD!s may look nice, they do go in the symbol table and that table can get big if you decide you're going to go crazy storing your data as tons of long unique words because-you-can.