Локальные имена: let и var
Вы узнаете
Когда нужен let, а когда var и как обновляется var.
let a = w * h; даёт имя значению внутри тела функции. var i : u8 = 0; объявляет имя, которое может меняться, а i = i + 1; меняет его. let нужен, когда значение вычисляется один раз, var — когда его обновляет цикл. Эти имена живут только внутри функции; на уровне модуля используется const.
Попробуйте
Замените let на var в area и проверьте вердикт; потом объясните, почему там уместнее let.

Where let, var and const live in a t27 spec and whether the name may change. Lesson 13 of the t27 basics course.
specs/basics/13_local_names.t27
// SPDX-License-Identifier: Apache-2.0
; t27 basics, lesson 13: Local names: let and var.
; Inside a function, let names a value once and var names one that changes.
module basics_13_local_names;
pub fn area(w: u16, h: u16) -> u16 {
let a = w * h;
return a;
}
pub fn count_up(n: u8) -> u8 {
var i : u8 = 0;
while (i < n) {
i = i + 1;
}
return i;
}
pub const SIDE : u16 = 12;
test a_square_of_side_12 {
assert SIDE * SIDE == 144;
}
Все уроки
Модуль 1 · Файл спеки
Что лежит в файле .t27: строка module, строки прозы и комментарии.
Модуль 2 · Значения и типы
Константы, ширина целого числа, а также true, false и текст.
Модуль 3 · Массивы, триты и выражения
Списки значений, три значения трита и что вычисляют операторы.
Модуль 4 · Тесты и функции
Блок test, несколько маленьких тестов в одной спеке и функция с типизированными входами.
Модуль 5 · Внутри функции
Имена через let и var, выбор через if и switch и циклы.
Модуль 6 · Видимость и свои типы
Что pub открывает другим модулям, и структуры и перечисления, которые вы объявляете.
Модуль 7 · Модули, правила и gen-ts
Чтение другого модуля, правило, которое выполняется всегда, и спека, превращённая в TypeScript.
Модуль 8 · Компилятор и tri
Бэкенды, которые пишет t27c, стадии, в которых он читает спеку, и команда tri.
Модуль 9 · Ошибки, программа и что дальше
Как читать ошибку компилятора, одна маленькая законченная программа и какой курс пройти дальше.