pub enum Decl {
Val {
kw: KwVal,
stage: Option<BindStageV1>,
name: BindName,
quant: Vec<TypeVarTok>,
colon: ColonTok,
ty: TypeExpr,
},
ValHorzCmd {
kw: KwVal,
cmd: HorzCmdTok,
quant: Vec<TypeVarTok>,
colon: ColonTok,
ty: TypeExpr,
},
ValVertCmd {
kw: KwVal,
cmd: VertCmdTok,
quant: Vec<TypeVarTok>,
colon: ColonTok,
ty: TypeExpr,
},
TypeOpaque {
kw: KwType,
name: VarTok,
cons: ConsTok,
kind: KindV1,
},
Type {
kw: KwType,
binds: TypeBindsErasedV1,
},
Module {
kw: KwModule,
name: CtorTok,
colon: ColonTok,
sig_: Box<SigExpr>,
},
Signature {
kw: KwSignature,
name: CtorTok,
eq: DefEqTok,
sig_: Box<SigExpr>,
},
Include {
kw: KwInclude,
sig_: Box<SigExpr>,
},
}Expand description
decl (parser_v1.mly:597-621) — one item of a sig … end body.
NOT a root: no arm contains Decl; reached only through
super::StructDeclV1, so SigExpr ↔ Decl never forms a rootless
static sub-cycle (the shape cst.rs’s AppArgErased doc warns the
engine rejects). Its recursion-bearing edges are plain DAG edges INTO
roots: ty: TypeExpr (the same satellite→root shape as
RecClauseV1.params: Vec<PatBot>) and sig_: Box<SigExpr>.
Deferred arms (parse errors): macro decls val \m : macro-type
(:608-611), row quantifiers (rowquant, :631-633 — no
ROWVAR token for this position yet).
Variants§
Val
VAL PERSISTENT? EXACT_TILDE? bound_identifier quant COLON typ
(:598-603; quant’s tyvar list :623-630 — val map 'a 'b : ('a -> 'b) -> …). The stage prefix is the decl-side twin of
super::Bind::Value’s own stage field, with the same
ordered-choice argument (see that arm’s doc comment).
ValHorzCmd
VAL BACKSLASH_CMD quant COLON typ (:604-605). Plain
HorzCmdTok — upstream uses the bare token, and program mode
already lexes \cmd. Naming mirrors
crate::cst::SigItem::ValHorzCmd.
ValVertCmd
VAL PLUS_CMD quant COLON typ (:606-607).
TypeOpaque
TYPE LOWER CONS kind — an OPAQUE type (:612-613). Tried
before the transparent Decl::Type: the two share the type name prefix and are told apart by :: vs =/tyvars
(backtracking is two tokens deep, cheap).
Type
TYPE bind_type — transparent type(s) (:614-615), sharing the
grouped chain with SigExpr::WithType.
Module
MODULE UPPER COLON sigexpr (:616-617) — note : here (a
decl constrains), vs :> on binds (a bind seals).
Signature
SIGNATURE UPPER EXACT_EQ sigexpr (:618-619).
Include
INCLUDE sigexpr (:620-621) — a decl-include includes a
SIGNATURE (contrast super::Bind::Include, which includes a
MODULE).
Trait Implementations§
Source§impl<__SyanMacro_Atom> Parse<__SyanMacro_Atom> for Declwhere
__SyanMacro_Atom: Spanned + Clone,
KwVal: Parse<__SyanMacro_Atom>,
Option<BindStageV1>: Parse<__SyanMacro_Atom>,
BindName: Parse<__SyanMacro_Atom>,
Vec<TypeVarTok>: Parse<__SyanMacro_Atom>,
ColonTok: Parse<__SyanMacro_Atom>,
TypeExpr: Parse<__SyanMacro_Atom>,
HorzCmdTok: Parse<__SyanMacro_Atom>,
VertCmdTok: Parse<__SyanMacro_Atom>,
KwType: Parse<__SyanMacro_Atom>,
VarTok: Parse<__SyanMacro_Atom>,
ConsTok: Parse<__SyanMacro_Atom>,
KindV1: Parse<__SyanMacro_Atom>,
TypeBindsErasedV1: Parse<__SyanMacro_Atom>,
KwModule: Parse<__SyanMacro_Atom>,
CtorTok: Parse<__SyanMacro_Atom>,
Box<SigExpr>: Parse<__SyanMacro_Atom>,
KwSignature: Parse<__SyanMacro_Atom>,
DefEqTok: Parse<__SyanMacro_Atom>,
KwInclude: Parse<__SyanMacro_Atom>,
impl<__SyanMacro_Atom> Parse<__SyanMacro_Atom> for Declwhere
__SyanMacro_Atom: Spanned + Clone,
KwVal: Parse<__SyanMacro_Atom>,
Option<BindStageV1>: Parse<__SyanMacro_Atom>,
BindName: Parse<__SyanMacro_Atom>,
Vec<TypeVarTok>: Parse<__SyanMacro_Atom>,
ColonTok: Parse<__SyanMacro_Atom>,
TypeExpr: Parse<__SyanMacro_Atom>,
HorzCmdTok: Parse<__SyanMacro_Atom>,
VertCmdTok: Parse<__SyanMacro_Atom>,
KwType: Parse<__SyanMacro_Atom>,
VarTok: Parse<__SyanMacro_Atom>,
ConsTok: Parse<__SyanMacro_Atom>,
KindV1: Parse<__SyanMacro_Atom>,
TypeBindsErasedV1: Parse<__SyanMacro_Atom>,
KwModule: Parse<__SyanMacro_Atom>,
CtorTok: Parse<__SyanMacro_Atom>,
Box<SigExpr>: Parse<__SyanMacro_Atom>,
KwSignature: Parse<__SyanMacro_Atom>,
DefEqTok: Parse<__SyanMacro_Atom>,
KwInclude: Parse<__SyanMacro_Atom>,
Source§type Error = ParseError<<__SyanMacro_Atom as Spanned>::Span>
type Error = ParseError<<__SyanMacro_Atom as Spanned>::Span>
<FieldTy as Parse<Atom>>::Error: Into<…> predicate re-creates a projection cycle on a
recursive field (E0275), which decycle’s bound-peeling does not break.