summaryrefslogtreecommitdiff
path: root/dhall/src/errors/UnboundVariable.txt
diff options
context:
space:
mode:
Diffstat (limited to 'dhall/src/errors/UnboundVariable.txt')
-rw-r--r--dhall/src/errors/UnboundVariable.txt97
1 files changed, 97 insertions, 0 deletions
diff --git a/dhall/src/errors/UnboundVariable.txt b/dhall/src/errors/UnboundVariable.txt
new file mode 100644
index 0000000..bd7d483
--- /dev/null
+++ b/dhall/src/errors/UnboundVariable.txt
@@ -0,0 +1,97 @@
+Explanation: Expressions can only reference previously introduced (i.e. "bound")
+variables that are still "in scope"
+
+For example, the following valid expressions introduce a "bound" variable named
+❰x❱:
+
+
+ ┌─────────────────┐
+ │ λ(x : Bool) → x │ Anonymous functions introduce "bound" variables
+ └─────────────────┘
+ ⇧
+ This is the bound variable
+
+
+ ┌─────────────────┐
+ │ let x = 1 in x │ ❰let❱ expressions introduce "bound" variables
+ └─────────────────┘
+ ⇧
+ This is the bound variable
+
+
+However, the following expressions are not valid because they all reference a
+variable that has not been introduced yet (i.e. an "unbound" variable):
+
+
+ ┌─────────────────┐
+ │ λ(x : Bool) → y │ The variable ❰y❱ hasn't been introduced yet
+ └─────────────────┘
+ ⇧
+ This is the unbound variable
+
+
+ ┌──────────────────────────┐
+ │ (let x = True in x) && x │ ❰x❱ is undefined outside the parentheses
+ └──────────────────────────┘
+ ⇧
+ This is the unbound variable
+
+
+ ┌────────────────┐
+ │ let x = x in x │ The definition for ❰x❱ cannot reference itself
+ └────────────────┘
+ ⇧
+ This is the unbound variable
+
+
+Some common reasons why you might get this error:
+
+● You misspell a variable name, like this:
+
+
+ ┌────────────────────────────────────────────────────┐
+ │ λ(empty : Bool) → if emty then "Empty" else "Full" │
+ └────────────────────────────────────────────────────┘
+ ⇧
+ Typo
+
+
+● You misspell a reserved identifier, like this:
+
+
+ ┌──────────────────────────┐
+ │ foral (a : Type) → a → a │
+ └──────────────────────────┘
+ ⇧
+ Typo
+
+
+● You tried to define a recursive value, like this:
+
+
+ ┌─────────────────────┐
+ │ let x = x + +1 in x │
+ └─────────────────────┘
+ ⇧
+ Recursive definitions are not allowed
+
+
+● You accidentally forgot a ❰λ❱ or ❰∀❱/❰forall❱
+
+
+ Unbound variable
+ ⇩
+ ┌─────────────────┐
+ │ (x : Bool) → x │
+ └─────────────────┘
+ ⇧
+ A ❰λ❱ here would transform this into a valid anonymous function
+
+
+ Unbound variable
+ ⇩
+ ┌────────────────────┐
+ │ (x : Bool) → Bool │
+ └────────────────────┘
+ ⇧
+ A ❰∀❱ or ❰forall❱ here would transform this into a valid function type