pub enum TypeApp {
InlineCmdTy {
kw: KwInline,
ilist: ListGroup<()>,
args: Vec<TypeCmdArgItemV1>,
},
BlockCmdTy {
kw: KwBlock,
blist: ListGroup<()>,
args: Vec<TypeCmdArgItemV1>,
},
MathCmdTy {
kw: KwMath,
mlist: ListGroup<()>,
args: Vec<TypeCmdArgItemV1>,
},
AppliedLong {
ctor: VarWithModTok,
first: TypeAtom,
rest: Vec<TypeAtom>,
},
Applied {
ctor: VarTok,
first: TypeAtom,
rest: Vec<TypeAtom>,
},
Atom(TypeAtom),
}Expand description
typ_app (parser_v1.mly:711-739). 0.1 delta from
crate::cst::ast::TypeApp (cst.rs:1297-1312): application is
PREFIX and n-ary (list int, pair int bool), not 0.0.6’s postfix
single-argument (int list) — the prefix→postfix bridge (with an
arity-1 guard: arity ≥ 2 is a LowerError, not a parse error) lives
in v1/lower.rs. Applied/AppliedLong (needing at least one
argument atom) are tried before Atom — a bare name has no argument
atom to consume and falls through cleanly (a following
keyword/=/and/->/* never parses as a TypeAtom).
Four further arms are keyword- or token-headed and so
disjoint from Applied/Atom’s VarTok-headed shapes (ordering them
BEFORE those is cosmetic, not load-bearing):
TypeApp::InlineCmdTy/TypeApp::BlockCmdTy/TypeApp::MathCmdTy:inline [τ, …]/block [τ, …]/math [τ, …]command types (parser.mly:730-735,typ_cmd_arg:763-774;math […]:parser.mly:830-831),KwInline/KwBlock/KwMath-headed (all three are V0_1 keywords already —val inline/val blockbinds;mathsince the math-split). One deliberate superset of upstream remains: each bracketed slot is a fullsuper::TyErasedV1(TypeExpr), not upstream’s narrowertyp_prod. The?(label: τ, …)optional-labeled-slot prefix is modeled — seeTypeCmdArgItemV1::opts;MathCmdTyreusesTypeCmdArgItemV1as-is, somath [?(l : τ) …]sig rows come for free.AppliedLong:M.t τ…— theLONG_LOWERqualified-head twin ofApplied(parser.mly:720-728,LONG_LOWERlexer.mll:318),VarWithModTok-headed (lexed by the program-mode capital-head scan,lexer.rs:753-777). Needed to NAME an abstract type from outside its sealing module — without it, an opaqueM.tcould never appear in another module’s signature at all.
Variants§
InlineCmdTy
inline [τ, …] — see the enum doc comment.
BlockCmdTy
block [τ, …] — see the enum doc comment.
MathCmdTy
math [τ, …] (upstream
parser.mly:830-831 MATH L_SQUARE optterm_list(COMMA, typ_cmd_arg) R_SQUARE → MMathCommandType(mncmdargtys) — same
typ_cmd_arg as inline/block). KwMath-headed, so this arm is
disjoint from Applied/Atom and ambiguity-free: a bare math
can never lex as a VarTok under V0_1 at all.
AppliedLong
M.t τ… — see the enum doc comment. Mirrors
Applied’s n-ary shape (v1/lower.rs’s prefix→postfix bridge
rejects arity ≥ 2 identically for both).
Applied
Atom(TypeAtom)
Trait Implementations§
Source§impl<__SyanMacro_Atom> Parse<__SyanMacro_Atom> for TypeAppwhere
__SyanMacro_Atom: Spanned + Clone,
KwInline: Parse<__SyanMacro_Atom>,
ListGroup<()>: GroupShape<__SyanMacro_Atom>,
__SyanSubstructOfOwn_ilist_TypeApp_InlineCmdTy_1383305089136131385: Parse<__SyanMacro_Atom>,
KwBlock: Parse<__SyanMacro_Atom>,
__SyanSubstructOfOwn_blist_TypeApp_BlockCmdTy_1383305089136131385: Parse<__SyanMacro_Atom>,
KwMath: Parse<__SyanMacro_Atom>,
__SyanSubstructOfOwn_mlist_TypeApp_MathCmdTy_1383305089136131385: Parse<__SyanMacro_Atom>,
VarWithModTok: Parse<__SyanMacro_Atom>,
TypeAtom: Parse<__SyanMacro_Atom>,
Vec<TypeAtom>: Parse<__SyanMacro_Atom>,
VarTok: Parse<__SyanMacro_Atom>,
impl<__SyanMacro_Atom> Parse<__SyanMacro_Atom> for TypeAppwhere
__SyanMacro_Atom: Spanned + Clone,
KwInline: Parse<__SyanMacro_Atom>,
ListGroup<()>: GroupShape<__SyanMacro_Atom>,
__SyanSubstructOfOwn_ilist_TypeApp_InlineCmdTy_1383305089136131385: Parse<__SyanMacro_Atom>,
KwBlock: Parse<__SyanMacro_Atom>,
__SyanSubstructOfOwn_blist_TypeApp_BlockCmdTy_1383305089136131385: Parse<__SyanMacro_Atom>,
KwMath: Parse<__SyanMacro_Atom>,
__SyanSubstructOfOwn_mlist_TypeApp_MathCmdTy_1383305089136131385: Parse<__SyanMacro_Atom>,
VarWithModTok: Parse<__SyanMacro_Atom>,
TypeAtom: Parse<__SyanMacro_Atom>,
Vec<TypeAtom>: Parse<__SyanMacro_Atom>,
VarTok: 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.