Library MetaRocq.Template.TemplateMonad.Common
From MetaRocq.Utils Require Import utils.
From MetaRocq.Template Require Import Ast.
Local Set Universe Polymorphism.
From MetaRocq.Template Require Import Ast.
Local Set Universe Polymorphism.
Reduction strategy to apply, beware cbv, cbn and lazy are strong.
Monomorphic Variant reductionStrategy : Set :=
cbv | cbn | hnf | all | lazy | unfold (i : kername).
Monomorphic Variant hint_locality : Set :=
local | export | global.
Record typed_term : Type := existT_typed_term
{ my_projT1 : Type
; my_projT2 : my_projT1
}.
Inductive option_instance (A : Type) : Type := my_Some : A → option_instance A | my_None : option_instance A.
Arguments Some {A} a.
Arguments None {A}.
Record TMInstance@{t u r} :=
{ TemplateMonad : Type@{t} → Type@{r}
; tmReturn : ∀ {A:Type@{t}}, A → TemplateMonad A
; tmBind : ∀ {A B : Type@{t}}, TemplateMonad A → (A → TemplateMonad B)
→ TemplateMonad B
; tmFail : ∀ {A:Type@{t}}, string → TemplateMonad A
; tmFreshName : ident → TemplateMonad ident
; tmLocate : qualid → TemplateMonad (list global_reference)
; tmLocateModule : qualid → TemplateMonad (list modpath)
; tmLocateModType : qualid → TemplateMonad (list modpath)
; tmCurrentModPath : unit → TemplateMonad modpath
; tmQuoteInductive : kername → TemplateMonad mutual_inductive_body
; tmQuoteUniverses : TemplateMonad ConstraintSet.t
; tmQuoteConstant : kername → bool → TemplateMonad constant_body
; tmMkInductive : bool → mutual_inductive_entry → TemplateMonad unit
; tmExistingInstance : hint_locality → global_reference → TemplateMonad unit
}.
Monomorphic Variant import_status : Set :=
| ImportDefaultBehavior
| ImportNeedQualified.
Monomorphic Variant locality :=
| Discharge
| Global (_ : import_status).