David Wheeler [mailto:david@;wheeler.net] wrote:
> The problem with this is that you have explicitly introduced true and > false into the language, and have therefore destroyed the utility of > context: > > my boolean $bool = 0; # False. > my $foo = ''; # False context. > if ($foo eq $bool) { > # Oops! > } If I am not mistaken, we already have explicitly introduced true and false into the language: my $bar = 0 but true; my $bas = 0 but false; A boolean type is therefore not quite as big a stretch as you imply. But we still have to deal with the expression issue: if ($bar eq $bas) {} # true if (?$bar eq ?$bas) {} # false my $bool = true; if ($bool eq $bar) {} # ??? Presumably, there exist rules for implicit casting when comparing objects of different types. If we have a rule that says that "if either operand is a boolean, then both are compared as booleans", then things would work just fine (except the the things I haven't considered ;-)). The question of "what is C<true>" is really an implementation issue. It could be a superposition of all true values; or it could just be a predefined value, that has some special magic associated with it. Perhaps its just a keyword, whose context determines whether it is a value, or a property. Dave.