NEPLg2.1 宣言構文仕様
最終更新: 2026-03-27
1. 宣言の基本原則
NEPLg2.1 では、定義の基本形を let <name> <expr> に統一する。関数定義は「関数宣言」という別構文ではなく、lambda 式を束縛した let である。
let zero 0
let inc \a add a 1
let mut counter 02. 関数定義
2.1 基本形
let <name> <expr>関数を定義する場合、<expr> に lambda を置く。
let double \a add a a
let const \a \b a
2.2 lambda
lambda の基本形は次の 2 つである。
\arg <expr>
\arg:
<exprs>0 引数は \() を使う。
let main \() 0
let main \():
let p Point x: 0 y: 7
0複数引数関数はカリー化して入れ子にする。
let add2 \a \b add a b
2.3 部分適用
関数はカリー化して定義するが、部分適用を値として残すことはサポートしない。したがって、定義側では \a \b ... の形を使って 2 引数関数を構成し、呼び出し側では必要な引数をすべて与える。
3. let と mut
3.1 不変束縛
let answer 42
3.2 可変束縛
let mut counter 0let mut で束縛できる式の制約や更新規則は effects.md を参照。
3.3 型注釈付き束縛
型注釈は let 専用構文ではなく、右辺の式に %TypeExpr を前置する。
let x %i32 add 1 2
let p %Pair i32 bool Pair 1 true4. struct 定義
Zenn #2 の表記に合わせ、struct 定義ではフィールドを name: TypeExpr で書く。
let Point struct:
x: i32
y: i32
let Pair struct .A .B:
first: .A
second: .B4.1 struct 値の構築
フィールド名付きの前置記法を用いる。
let p Point x: 0 y: 75. enum 定義
enum も let に統一する。
let Option enum .T:
Some .T
None
let Result enum .T .E:
Ok .T
Err .Eバリアント参照は、従来どおり修飾形 Option::Some を基本に説明する。bare 形の解決は型文脈に依存するため、曖昧になる場合は修飾形を要求する。
6. trait 定義
trait / impl / where などは Zenn #1 / #2 ではまだ全面確定していない。ここでは let に統一する原則だけを固定し、表層構文は前置型記法に合わせる。
let Eq trait:
let eq %fn Self fn Self bool \a \b ...trait メソッドの型も fn A B 形式を使う。
7. impl 定義
let i32 impl for Eq:
let eq %fn i32 fn i32 bool \a \b i32_eq a b詳細な coherence や where 節の扱いは traits.md を参照。
8. 可視性
可視性キーワード自体は従来どおり使えるが、宣言の核は常に let である。
pub let zero 0
pub let Point struct:
x: i32
y: i32