pub enum ModExpr {
Functor {
fun_kw: KwFun,
lp: LParenTok,
param: CtorTok,
colon: ColonTok,
dom: Box<SigExpr>,
rp: RParenTok,
arrow: ArrowTok,
body: Box<ModExpr>,
},
Coerce {
name: CtorTok,
coerce: CoerceTok,
sig_: Box<SigExpr>,
},
App {
func: ModChainV1,
arg: ModChainV1,
},
Var(ModChainV1),
Struct {
struct_kw: KwStruct,
binds: Vec<StructBindV1>,
end_kw: KwEnd,
},
}Expand description
modexpr (parser_v1.mly:380-403). SELF-LOOP ROOT: Functor.body: Box<ModExpr> (:381-382). Variant order is parse priority:
Functor (fun-headed) and Struct (struct-headed) are
keyword-disjoint from everything; Coerce (UPPER :>) must precede
App/Var so the :> suffix is claimed before a bare chain matches;
App (two chains, modexpr_app :388-394) precedes Var (one
chain, modexpr_bot :398-400) for longest-match. Struct bodies go
through super::StructBindV1 (the struct-body connector, erased), so
ModExpr never statically references super::Bind — see the
module doc comment’s SCC story.
Variants§
Functor
FUN ( UPPER : sigexpr ) ARROW modexpr (parser_v1.mly:381-382).
Fields
Coerce
UPPER COERCE sigexpr (:383-384) — coercion applies to a BARE
module name only, upstream-faithfully (A.B :> S is a parse
error there too).
App
mod_chain mod_chain — functor application (:389-394).
Var(ModChainV1)
mod_chain — a (possibly long) module path (:399-400).
Struct
STRUCT list(bind) END (:401-402) — the only form v1/lower.rs
gives real semantics to; reuses the struct-body connector.
Trait Implementations§
Source§impl<__SyanMacro_Atom> Parse<__SyanMacro_Atom> for ModExprwhere
__SyanMacro_Atom: Spanned + Clone,
KwFun: Parse<__SyanMacro_Atom>,
LParenTok: Parse<__SyanMacro_Atom>,
CtorTok: Parse<__SyanMacro_Atom>,
ColonTok: Parse<__SyanMacro_Atom>,
RParenTok: Parse<__SyanMacro_Atom>,
ArrowTok: Parse<__SyanMacro_Atom>,
CoerceTok: Parse<__SyanMacro_Atom>,
ModChainV1: Parse<__SyanMacro_Atom>,
KwStruct: Parse<__SyanMacro_Atom>,
Vec<StructBindV1>: Parse<__SyanMacro_Atom>,
KwEnd: Parse<__SyanMacro_Atom>,
SigBotV1: Parse<__SyanMacro_Atom>,
KwWith: Parse<__SyanMacro_Atom>,
Option<ModChainV1>: Parse<__SyanMacro_Atom>,
KwType: Parse<__SyanMacro_Atom>,
TypeBindsErasedV1: Parse<__SyanMacro_Atom>,
Self: ParseRanked8909385c15d27adc<(((),),), __SyanMacro_Atom>,
impl<__SyanMacro_Atom> Parse<__SyanMacro_Atom> for ModExprwhere
__SyanMacro_Atom: Spanned + Clone,
KwFun: Parse<__SyanMacro_Atom>,
LParenTok: Parse<__SyanMacro_Atom>,
CtorTok: Parse<__SyanMacro_Atom>,
ColonTok: Parse<__SyanMacro_Atom>,
RParenTok: Parse<__SyanMacro_Atom>,
ArrowTok: Parse<__SyanMacro_Atom>,
CoerceTok: Parse<__SyanMacro_Atom>,
ModChainV1: Parse<__SyanMacro_Atom>,
KwStruct: Parse<__SyanMacro_Atom>,
Vec<StructBindV1>: Parse<__SyanMacro_Atom>,
KwEnd: Parse<__SyanMacro_Atom>,
SigBotV1: Parse<__SyanMacro_Atom>,
KwWith: Parse<__SyanMacro_Atom>,
Option<ModChainV1>: Parse<__SyanMacro_Atom>,
KwType: Parse<__SyanMacro_Atom>,
TypeBindsErasedV1: Parse<__SyanMacro_Atom>,
Self: ParseRanked8909385c15d27adc<(((),),), __SyanMacro_Atom>,
Source§type Error = <ModExpr as ParseRanked8909385c15d27adc<(((),),), __SyanMacro_Atom>>::Error
type Error = <ModExpr as ParseRanked8909385c15d27adc<(((),),), __SyanMacro_Atom>>::Error
<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.