> OK, there's two things here: internally, there's an abstract "Node" > class, for which each new Node derives (as you see in the screenshot, > "Constant", "Add" and "ExecStream" all derive from Node). Hovever, > there's no need to discriminate between things that perform have the > same function. A string is a string... regardless of whether you use > it as a flag or a filename. If you look at C, for example, a (char *) > or an int can be use for whatever you like. What I was trying to point out was the exact thing you use as an example against my rationale :-) C manipulates memory addresses, but let you refer to those addresses as int, float, double, char *, etc. so that at compile time it can complain when you do (int = float) and warns you that it's an implied cast. Flags and filenames may be strings in a shell, but represent different things, the same way memory contains only bytes that represent ints and floats. We may choose not to care about the difference between flag and filename strings in Piper. What I was saying is that this will eventually prevent us to do things like adding a "help" button to inputs that would open a file browser when a filename is needed or a drop-down list of possible options when a flag is needed, or check that the filename you gave is an actual file, etc. -- Nicolas Chauvat http://www.logilab.com - "Mais où est donc Ornicar ?" - LOGILAB, Paris (France)