The runtime system and its extensive built-in operations are the reason for much of Icon's enduring appeal. In Icon, all expressions either succeed and produce 1 or more results, or they fail to produce any results. This replaces the notion of boolean values in conventional languages. Since failure is not indicated by a sentinel value, code becomes cleaner. Comparison operators produce their right-hand side if they succeed.
Some expressions can succeed and produce more than one result.
These expressions are called generators. Generators produce multiple results when they are needed by the surrounding expression. Operations convert operands to needed types when possible. They are immutable values in the same sense that integers are, rather than arrays of changable values. When you perform an operation that looks like it is modifying a string value, what it is really doing is building a new string value.