配列リテラル

#[x₁, x₂, .. , xₙ] は、Array α の項を簡単に作るための構文です。

/- info: #[1, 2, 3] : Array Nat -/
#check #[1, 2, 3]

もしこの構文がなければ、Array α の項を作るにはコンストラクタを利用するしかないので、次のように書く必要があります。

/-- 標準の Array をまねて自作した配列型 -/
structure MyArray (α : Type) where
  toList : List α

abbrev List.toMyArray {α : Type} (xs : List α) : MyArray α := ⟨xs⟩

/- info: [1, 2, 3].toMyArray : MyArray Nat -/
#check List.toMyArray [1, 2, 3]

しかし、配列リテラル構文があるおかげで、次のように見やすく簡潔に書くことができます。

syntax "my#[" term,*,? "]" : term

macro_rules
  | `(my#[ $elems,* ]) => `(List.toMyArray [ $elems,* ])

-- 項を作るのが楽になった!
#check (my#[1, 2, 3] : MyArray Nat)