@@ -125,7 +125,7 @@ Thus, type class instance synthesis is also a means of constructing programs in
125
125
126
126
:::
127
127
128
- 通常の多相定義は単に任意のパラメータでインスタンス化されることを想定していますが、型クラスでオーバーロードされる演算子は特定のパラメータセットに対してオーバーロードされる演算を定義する {deftech}_インスタンス_ (instance)としてインスタンス化されます。これらの {deftech}[暗黙のインスタンス ] (instance-implicit)パラメータは角括弧で示されます。呼び出しの際において、Lean は利用可能な候補から適切なインスタンスを {deftech key:="synthesis"}_統合_ {index}[instance synthesis] {index subterm:="of type class instances"}[synthesis] (synthesize)するかエラーを通知します。インスタンスはそれ自身がインスタンスパラメータを持つことがあるため、この検索プロセスは再帰的であり、様々なインスタンスからのコードを組み合わせた最終的な合成インスタンス値になる可能性があります。このように型クラスのインスタンス統合は型指向の流儀によるプログラムを構築する手段でもあります。
128
+ 通常の多相定義は単に任意のパラメータでインスタンス化されることを想定していますが、型クラスでオーバーロードされる演算子は特定のパラメータセットに対してオーバーロードされる演算を定義する {deftech}_インスタンス_ (instance)としてインスタンス化されます。これらの {deftech}[インスタンス暗黙 ] (instance-implicit)パラメータは角括弧で示されます。呼び出しの際において、Lean は利用可能な候補から適切なインスタンスを {deftech key:="synthesis"}_統合_ {index}[instance synthesis] {index subterm:="of type class instances"}[synthesis] (synthesize)するかエラーを通知します。インスタンスはそれ自身がインスタンスパラメータを持つことがあるため、この検索プロセスは再帰的であり、様々なインスタンスからのコードを組み合わせた最終的な合成インスタンス値になる可能性があります。このように型クラスのインスタンス統合は型指向の流儀によるプログラムを構築する手段でもあります。
129
129
130
130
:::comment
131
131
Here are some typical use cases for type classes:
@@ -210,7 +210,7 @@ The differences between structure and class declarations are:
210
210
211
211
: フィールドの代わりにメソッド
212
212
213
- 構造体型の値を明示的なパラメータとして受け取るフィールドの射影を作成する代わりに {tech}[メソッド] が作成されます。各メソッドは対応するインスタンスを暗黙のインスタンスのパラメータとして取ります 。
213
+ 構造体型の値を明示的なパラメータとして受け取るフィールドの射影を作成する代わりに {tech}[メソッド] が作成されます。各メソッドは対応するインスタンスをインスタンス暗黙のパラメータとして取ります 。
214
214
215
215
:::comment
216
216
: Instance-implicit parent classes
@@ -221,9 +221,9 @@ The differences between structure and class declarations are:
221
221
222
222
:::
223
223
224
- : 暗黙のインスタンスとしての親クラス
224
+ : インスタンス暗黙としての親クラス
225
225
226
- 他のクラスを継承するクラスのコンストラクタは、明示的なパラメータではなくそのクラスの親のインスタンスを暗黙のインスタンスのパラメータとして受け取ります 。このクラスのインスタンスが定義されると、継承されたフィールドの値を見つけるためにインスタンス統合が使用されます。クラスでない親は依然として基礎となるコンストラクタの明示的なパラメータになります。
226
+ 他のクラスを継承するクラスのコンストラクタは、明示的なパラメータではなくそのクラスの親のインスタンスをインスタンス暗黙のパラメータとして受け取ります 。このクラスのインスタンスが定義されると、継承されたフィールドの値を見つけるためにインスタンス統合が使用されます。クラスでない親は依然として基礎となるコンストラクタの明示的なパラメータになります。
227
227
228
228
:::comment
229
229
: Parent projections via instance synthesis
@@ -246,7 +246,7 @@ The differences between structure and class declarations are:
246
246
247
247
: クラスとして登録される
248
248
249
- 宣言の結果出来る帰納型は型クラスとして登録され、インスタンスの定義および暗黙のインスタンスの引数の型のために使用されます 。
249
+ 宣言の結果出来る帰納型は型クラスとして登録され、インスタンスの定義およびインスタンス暗黙の引数の型のために使用されます 。
250
250
251
251
:::comment
252
252
: Out and semi-out parameters are considered
@@ -275,7 +275,7 @@ While {keywordOf Lean.Parser.Command.declaration}`deriving` clauses are allowed
275
275
Lean rejects instance -implicit parameters of types that are not classes:
276
276
:::
277
277
278
- Lean はクラスでない型の暗黙のインスタンスのパラメータを拒否します :
278
+ Lean はクラスでない型のインスタンス暗黙のパラメータを拒否します :
279
279
280
280
```lean (error := true ) (name := notClass)
281
281
def f [n : Nat] : n = n := rfl
@@ -375,7 +375,7 @@ C2.Magma.mk.{u} {α : Type u} (op : α → α → α) : C2.Magma α
375
375
{name}`S.Semigroup.mk`, however, takes its parent as an ordinary parameter, while {name}`C2.Semigroup.mk` takes its parent as an instance implicit parameter :
376
376
:::
377
377
378
- しかし、 {name}`S.Semigroup.mk` はその親を通常のパラメータとして受け取る一方で、 {name}`C2.Semigroup.mk` は親を暗黙のインスタンスのパラメータとして受け取ります :
378
+ しかし、 {name}`S.Semigroup.mk` はその親を通常のパラメータとして受け取る一方で、 {name}`C2.Semigroup.mk` は親をインスタンス暗黙のパラメータとして受け取ります :
379
379
380
380
```signature
381
381
S.Semigroup.mk.{u} {α : Type u}
@@ -396,7 +396,7 @@ Finally, {name}`C2.Monoid.mk` takes its semigroup parent as an instance implicit
396
396
The references to `op` become references to the method {name}`C2.Magma.op`, relying on instance synthesis to recover the implementation from the {name}`C2.Semigroup` instance -implicit parameter via its parent projection:
397
397
:::
398
398
399
- 最後に、 {name}`C2.Monoid.mk` は暗黙のインスタンスのパラメータとして半群の親を取ります 。`op` への参照はメソッド {name}`C2.Magma.op` への参照になります。これは {name}`C2.Semigroup` の暗黙のインスタンスのパラメータから親の射影を経由して実装を復元するインスタンス統合に依存しています :
399
+ 最後に、 {name}`C2.Monoid.mk` はインスタンス暗黙のパラメータとして半群の親を取ります 。`op` への参照はメソッド {name}`C2.Magma.op` への参照になります。これは {name}`C2.Semigroup` のインスタンス暗黙のパラメータから親の射影を経由して実装を復元するインスタンス統合に依存しています :
400
400
401
401
```signature
402
402
C2.Monoid.mk.{u} {α : Type u}
0 commit comments