## 目的 ユーザ定義関数・型に型パラメータを取れるようにする。`list[T]` (#7) / `dict[K,V]` (#8) / `Option[T]` (#15) / `Future[T]` は既に組み込みでジェネリック相当だが、ユーザがそれを書く手段が無い。 ## 想定構文 ``` def map[T, U](xs: List[T], f: fn(T) -> U) -> List[U]: out: List[U] = list_new() for x in xs: list_push(out, f(x)) return out ``` または C++/Rust 寄りに `<T, U>` を使う案もある(Python 構文との親和性は `[T]` が高い)。 ## 検討事項 - 単純化 (monomorphization) するか辞書渡し (dictionary passing) にするか - 制約構文: `T: Hashable` / `where T: Eq` の必要性 (→ trait/protocol #TBD と連動) - 型推論 (#12) との相互作用: 呼び出し側で `map(xs, f)` だけで `T, U` を推論できるか - LLVM IR 上の表現: monomorphize なら ir 関数を型ごとに複製 ## 受け入れ条件 - [ ] 関数の型パラメータ宣言と呼び出し - [ ] エラー時の型変数の表示が分かりやすい (#60) - [ ] examples に汎用関数 (`map` / `filter` / `id`) を追加 ## 関連 - 前提: #12 (型推論) との整合 - 連携: #7 (list[T]), #8 (dict[K,V]), trait/protocol issue (別途作成)
目的
ユーザ定義関数・型に型パラメータを取れるようにする。
list[T](#7) /dict[K,V](#8) /Option[T](#15) /Future[T]は既に組み込みでジェネリック相当だが、ユーザがそれを書く手段が無い。想定構文
または C++/Rust 寄りに
<T, U>を使う案もある(Python 構文との親和性は[T]が高い)。検討事項
T: Hashable/where T: Eqの必要性 (→ trait/protocol #TBD と連動)map(xs, f)だけでT, Uを推論できるか受け入れ条件
map/filter/id) を追加関連