rust/syntax: explicit binds for lambda types
This commit is contained in:
parent
8e5c8f697f
commit
3f609ccc40
|
@ -29,13 +29,17 @@ impl Parse for Lambda {
|
|||
|
||||
#[derive(Clone, Debug)]
|
||||
pub enum Expr {
|
||||
Infer,
|
||||
|
||||
Literal(Literal),
|
||||
|
||||
Use(SelIdent),
|
||||
|
||||
Lambda(Lambda),
|
||||
TyLambda(Lambda),
|
||||
TyLambdaLin(Lambda),
|
||||
TyLambda {
|
||||
binds: Box<Expr>,
|
||||
lam: Lambda,
|
||||
},
|
||||
Apply(Box<Expr>, Vec<(EvEqSourceSpan, Expr)>),
|
||||
|
||||
Record(Record<Expr>),
|
||||
|
@ -64,10 +68,16 @@ fn parse_minexpr(env: &mut ParseEnv<'_>) -> Result<Expr> {
|
|||
}
|
||||
}
|
||||
|
||||
Tok::Kw(Kw::Infer) => Ok(Expr::Infer),
|
||||
Tok::Kw(Kw::Literal(lit)) => Ok(Expr::Literal(lit)),
|
||||
Tok::Kw(Kw::Lambda) => Lambda::parse(env).map(Expr::Lambda),
|
||||
Tok::Kw(Kw::TyLambda) => Lambda::parse(env).map(Expr::TyLambda),
|
||||
Tok::Kw(Kw::TyLambdaLin) => Lambda::parse(env).map(Expr::TyLambdaLin),
|
||||
Tok::Kw(Kw::TyLambda) => {
|
||||
env.lxr.expect(Tok::LParen, Ectx::Parentheses)?;
|
||||
let binds = Box::new(Expr::parse(env)?);
|
||||
env.lxr.expect(Tok::RParen, Ectx::Parentheses)?;
|
||||
let lam = Lambda::parse(env)?;
|
||||
Ok(Expr::TyLambda { binds, lam })
|
||||
},
|
||||
|
||||
Tok::LParen => {
|
||||
let inner = Expr::parse(env)?;
|
||||
|
|
|
@ -14,7 +14,7 @@ pub enum Kw {
|
|||
Let,
|
||||
Lambda,
|
||||
TyLambda,
|
||||
TyLambdaLin,
|
||||
Infer,
|
||||
}
|
||||
|
||||
impl MaybeParse for (EvEqSourceSpan, Literal) {
|
||||
|
@ -51,7 +51,7 @@ impl core::str::FromStr for Kw {
|
|||
Ok(match s {
|
||||
"λ" => Kw::Lambda,
|
||||
"Λ" => Kw::TyLambda,
|
||||
"Λlin" => Kw::TyLambdaLin,
|
||||
"infer" => Kw::Infer,
|
||||
"let" => Kw::Let,
|
||||
_ => return Err(()),
|
||||
})
|
||||
|
|
Loading…
Reference in a new issue