While it is impossible to add parsing into the evaluation stage and yet still maintain our static-language benefits, we can safely add _a little bit_ of evaluation into parsing.
::: tip Terminology
In the text below, we use the term _"constant"_ to refer to:
- A `const` definition
- The result of any command that outputs a constant value when provide constant inputs.
:::
By their nature, **_constants_** and constant values are known at Parse-time. This, of course, is in sharp contrast to _variable_ declarations and values.
As a result, we can utilize constants as safe, known arguments to parse-time keywords like [`source`](/commands/docs/source.md), [`use`](/commands/docs/use.md), and related commands.
Consider [this example](./thinking_in_nu.md#example-dynamically-creating-a-filename-to-be-sourced) from _"Thinking in Nu"_:
```nu
let my_path = "~/nushell-files"
source $"($my_path)/common.nu"
```
As noted there, we **_can_**, however, do the following instead:
```nu:line-numbers
const my_path = "~/nushell-files"
source $"($my_path)/common.nu"
```
Let's analyze the Parse/Eval process for this version:
1. The entire program is Parsed into IR.
1. Line 1: The `const` definition is parsed. Because it is a constant assignment (and `const` is also a parser-keyword), that assignment can also be Evaluated at this stage. Its name and value are stored by the Parser.
2. Line 2: The `source` command is parsed. Because `source` is also a parser-keyword, it is Evaluated at this stage. In this example, however, it can be **_successfully_** parsed since its argument is **_known_** and can be retrieved at this point.
3. The source-code of `~/nushell-files/common.nu` is parsed. If it is invalid, then an error will be generated, otherwise the IR results will be included in evaluation in the next stage.
2. The entire IR is Evaluated:
1. Line 1: The `const` definition is Evaluated. The variable is added to the runtime stack.
2. Line 2: The IR result from parsing `~/nushell-files/common.nu` is Evaluated.
::: important
- An `eval` adds additional parsing during evaluation
- Parse-time constants do the opposite, adding additional evaluation to the parser.
:::
Also keep in mind that the evaluation allowed during parsing is **_very restricted_**. It is limited to only a small subset of what is allowed during a regular evaluation.
For example, the following is not allowed:
```nu
const foo_contents = (open foo.nu)