diff --git a/LeanByExample/Reference/Option/AutoImplicit.lean b/LeanByExample/Reference/Option/AutoImplicit.lean index 9727e060..d8530fc5 100644 --- a/LeanByExample/Reference/Option/AutoImplicit.lean +++ b/LeanByExample/Reference/Option/AutoImplicit.lean @@ -2,13 +2,8 @@ `autoImplicit` オプションは、自動束縛暗黙引数(auto bound implicit arguments)という機能を制御します。 有効にすると、宣言が省略された引数が1文字であるとき、それを暗黙引数として自動的に追加します。 - -```admonish error title="非推奨" -この機能には以下の問題点が指摘されており使用は推奨されません。 -* タイポを見過ごしやすくなってしまう -* 自動束縛の結果どのような型になるか指定できないため、意図しない型に束縛されてバグを引き起こす可能性がある -``` -/ +import Lean --# set_option relaxedAutoImplicit false --# -- `autoImplicit` が無効の時 @@ -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