This PR changes the signature of `Array.get` to take a Nat and a proof, rather than a `Fin`, for consistency with the rest of the (planned) Array API. Note that because of bootstrapping issues we can't provide `get_elem_tactic` as an autoparameter for the proof. As users will mostly use the `xs[i]` notation provided by `GetElem`, this hopefully isn't a problem. We may restore `Fin` based versions, either here or downstream, as needed, but they won't be the "main" functions. --------- Co-authored-by: David Thrane Christiansen <david@davidchristiansen.dk>
22 lines
546 B
Text
22 lines
546 B
Text
namespace Ex
|
||
|
||
class GetElem (Cont : Type u) (Idx : Type v) (Elem : outParam (Type w)) where
|
||
getElem' (xs : Cont) (i : Idx) : Elem
|
||
|
||
export GetElem (getElem')
|
||
|
||
instance : GetElem Lean.Syntax Nat Lean.Syntax where
|
||
getElem' xs i := xs.getArg i
|
||
|
||
instance : GetElem (Array α) Nat α where
|
||
getElem' xs i := xs.get i sorry
|
||
|
||
open Lean
|
||
|
||
def f (stx : Option Syntax) : Syntax :=
|
||
stx.getD default
|
||
|
||
def bad (doFor : Syntax) : Syntax :=
|
||
let doForDecls := (getElem' doFor 1).getArgs
|
||
let doForDecl := getElem' doForDecls 1
|
||
f (getElem' doForDecl 1)
|