let

let Statement

The let Statement gives names to data.

let x: Int = 1 + 2;

Type annotation is freely optional.

let x = 1 + 2;

This Statement computes the expression 1 + 2 (the result is 3 of course), and we call it x. Frankly, this is a variable, and you can use x as a Value.

The last ; is required. This Statement can be denoted by following BNF;

<let> ::= `let` <name> `=` <expression> `;`
        | `let` <name> `:` <type> `=` <expression> `;`

<name> ::= <identifier>

shadowing

When some variables are defined already, you can declare the same names with let. New data shadows old data.

let x = 1;
// Here, x is Nat 1.

let x = "hoge";
// Here, x is String "hoge".

Once variables are shadowed, they cannot be used.