Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 27 additions & 6 deletions LeanByExample/Reference/Option/AutoImplicit.lean
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,8 @@
`autoImplicit` オプションは、自動束縛暗黙引数(auto bound implicit arguments)という機能を制御します。

有効にすると、宣言が省略された引数が1文字であるとき、それを暗黙引数として自動的に追加します。

```admonish error title="非推奨"
この機能には以下の問題点が指摘されており使用は推奨されません。
* タイポを見過ごしやすくなってしまう
* 自動束縛の結果どのような型になるか指定できないため、意図しない型に束縛されてバグを引き起こす可能性がある
```
-/
import Lean --#
set_option relaxedAutoImplicit false --#

-- `autoImplicit` が無効の時
Expand Down Expand Up @@ -55,3 +50,29 @@ def nonempty₃ : List ℱ → Bool
| _ :: _ => true

end autoImpl

/- ## 問題点

```admonish error title="非推奨"
この機能には以下の問題点が指摘されており使用は推奨されません。
* タイポを見過ごしやすくなってしまう
* 自動束縛の結果どのような型になるか指定できないため、意図しない型に束縛されてバグを引き起こす可能性がある
```

デフォルトではこのオプションは有効になっているため、`lakefile` の設定で無効にすることをお勧めします。
-/

open Lean Elab Command

/-- オプションのデフォルト値を取得する関数 -/
def getDefaultValue (opt : Name) : CommandElabM Unit := do
let decls ← getOptionDecls
match decls.find? opt with
| some decl =>
logInfo m!"default value of {opt} is {decl.defValue}"
| none =>
logInfo m!"{opt} is unknown"

/-- info: default value of autoImplicit is true -/
#guard_msgs in
#eval getDefaultValue `autoImplicit