Skip to content

Commit 563190b

Browse files
author
William Sørensen
committed
faet: finish deepThunk generation
1 parent 05a9195 commit 563190b

File tree

5 files changed

+361
-65
lines changed

5 files changed

+361
-65
lines changed

Qpf/Macro/Data.lean

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -419,10 +419,11 @@ def isPolynomial (view : DataView) (F: Term) : CommandElabM (Option Term) := do
419419
-/
420420
def mkType (view : DataView) (base : Term × Term × Term) : CommandElabM Unit := do
421421
trace[QPF] "mkType"
422-
let uncurriedIdent ← addSuffixToDeclIdent view.declId "Uncurried"
423-
let baseIdent ← addSuffixToDeclIdent view.declId "Base"
422+
let uncurriedIdent ← addSuffixToDeclIdent view.declId "Uncurried"
423+
let baseIdExt ← addSuffixToDeclIdent view.declId "Base"
424+
let baseIdent ← addSuffixToDeclIdent baseIdExt "Uncurried"
424425
let baseFunctorIdent ← addSuffixToDeclIdent baseIdent "instMvFunctor"
425-
let baseQPFIdent ← addSuffixToDeclIdent baseIdent "instQPF"
426+
let baseQPFIdent ← addSuffixToDeclIdent baseIdent "instQPF"
426427

427428
let deadBinderNamedArgs ← view.deadBinderNames.mapM fun n =>
428429
`(namedArgument| ($n:ident := $n:term))
@@ -438,6 +439,9 @@ def mkType (view : DataView) (base : Term × Term × Term) : CommandElabM Unit :
438439
abbrev $baseIdent:ident $view.deadBinders:bracketedBinder* : TypeFun $(quote <| arity + 1) :=
439440
$base
440441

442+
abbrev $baseIdExt $view.deadBinders:bracketedBinder*
443+
:= TypeFun.curried $baseApplied
444+
441445
instance $baseFunctorIdent:ident : MvFunctor ($baseApplied) := $functor
442446
instance $baseQPFIdent:ident : MvQPF ($baseApplied) := $q
443447

@@ -484,9 +488,8 @@ def elabData : CommandElab := fun stx => do
484488
mkType view base
485489
mkConstructors view shape
486490

487-
if let .Data := view.command then
488-
try genRecursors view
489-
catch e => trace[QPF] (← e.toMessageData.toString)
491+
try genRecursors view shape
492+
catch e => trace[QPF] (← e.toMessageData.toString)
490493

491494

492495
end Data.Command

Qpf/Macro/Data/Constructors.lean

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Qpf.Macro.Data.Replace
2+
import Qpf.Macro.Data.RecForm
23
import Qpf.Macro.Data.View
34
import Qpf.Macro.NameUtils
45

@@ -15,7 +16,12 @@ partial def countConstructorArgs : Syntax → Nat
1516
| _ => 0
1617

1718

18-
def mkConstructorsWithNameAndType (view : DataView) (shape : Name) (nameGen : CtorView → Ident) (ty : Term) := do
19+
def mkConstructorsWithNameAndType
20+
(view : DataView) (shape : Name)
21+
(nameGen : CtorView → Ident) (argTy retTy : Term)
22+
(binders : TSyntaxArray ``Parser.Term.bracketedBinder)
23+
24+
:= do
1925
for ctor in view.ctors do
2026
trace[QPF] "mkConstructors\n{ctor.declName} : {ctor.type?}"
2127
let n_args := (ctor.type?.map countConstructorArgs).getD 0
@@ -36,8 +42,12 @@ def mkConstructorsWithNameAndType (view : DataView) (shape : Name) (nameGen : Ct
3642
`(fun $args:ident* => $mk ($shapeCtor $args:ident*))
3743
let body ← body
3844

39-
let type : Term := TSyntax.mk <|
40-
(ctor.type?.map fun type => Replace.replaceAllStx view.getExpectedType ty type).getD ty
45+
let recType := view.getExpectedType
46+
let forms := RecursionForm.extract ctor recType
47+
48+
let x := forms.map $ RecursionForm.replaceRec view.getExpectedType argTy
49+
let type ← RecursionForm.toType retTy x
50+
4151
let modifiers : Modifiers := {
4252
isNoncomputable := view.modifiers.isNoncomputable
4353
attrs := #[{
@@ -48,7 +58,7 @@ def mkConstructorsWithNameAndType (view : DataView) (shape : Name) (nameGen : Ct
4858

4959
let cmd ← `(
5060
$(quote modifiers):declModifiers
51-
def $declId:ident : $type := $body:term
61+
def $declId:ident $binders*: $type := $body:term
5262
)
5363

5464
trace[QPF] "mkConstructor.cmd = {cmd}"
@@ -62,7 +72,6 @@ def mkConstructors (view : DataView) (shape : Name) : CommandElabM Unit := do
6272
let explicit ← view.getExplicitExpectedType
6373
let nameGen := (mkIdent <| Name.stripPrefix2 (←getCurrNamespace) ·.declName)
6474

65-
mkConstructorsWithNameAndType view shape nameGen explicit
66-
75+
mkConstructorsWithNameAndType view shape nameGen explicit explicit #[]
6776

6877
end Data.Command

0 commit comments

Comments
 (0)