-
-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #940 from lean-ja/Seasawher/issue939
`autoimplicit` オプションを紹介する
- Loading branch information
Showing
3 changed files
with
59 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
/- # autoImplicit | ||
`autoImplicit` オプションは、自動束縛暗黙引数(auto bound implicit arguments)という機能を制御します。 | ||
有効にすると、宣言が省略された引数が1文字であるとき、それを暗黙引数として自動的に追加します。 | ||
```admonish error title="非推奨" | ||
この機能には以下の問題点が指摘されており使用は推奨されません。 | ||
* タイポを見過ごしやすくなってしまう | ||
* 自動束縛の結果どのような型になるか指定できないため、意図しない型に束縛されてバグを引き起こす可能性がある | ||
``` | ||
-/ | ||
set_option relaxedAutoImplicit false --# | ||
|
||
-- `autoImplicit` が無効の時 | ||
set_option autoImplicit false in | ||
|
||
-- `nonempty` の定義には `α` という未定義の識別子が含まれるため、 | ||
-- エラーになる | ||
/-- error: unknown identifier 'α' -/ | ||
#guard_msgs in | ||
def nonempty : List α → Bool | ||
| [] => false | ||
| _ :: _ => true | ||
|
||
-- `autoImplicit` が有効の時 | ||
set_option autoImplicit true in | ||
|
||
-- `α` という未定義の識別子を含んでいてもエラーにならない。 | ||
-- 勝手に暗黙引数として追加されている | ||
def head : List α → Option α | ||
| [] => none | ||
| x :: _ => some x | ||
|
||
/- 1文字の未束縛の識別子であればなんでも対象になるようです。 -/ | ||
section autoImpl | ||
|
||
-- `autoImplicit` が有効の時 | ||
set_option autoImplicit true | ||
|
||
-- ギリシャ文字ではなくて1文字の小文字でも暗黙引数として追加される | ||
def nonempty₂ : List a → Bool | ||
| [] => false | ||
| _ :: _ => true | ||
|
||
-- `ℱ` も暗黙引数になる | ||
def nonempty₃ : List ℱ → Bool | ||
| [] => false | ||
| _ :: _ => true | ||
|
||
-- 2文字の識別子は暗黙引数として追加されない | ||
/-- error: unknown identifier 'AB' -/ | ||
#guard_msgs in | ||
def nonempty₄ : List AB → Bool | ||
| [] => false | ||
| _ :: _ => true | ||
|
||
end autoImpl |
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters