pub enum OcamlExpr {
Show 16 variants
Lit(OcamlLit),
Var(String),
BinOp(String, Box<OcamlExpr>, Box<OcamlExpr>),
UnaryOp(String, Box<OcamlExpr>),
App(Box<OcamlExpr>, Vec<OcamlExpr>),
Lambda(Vec<String>, Box<OcamlExpr>),
Let(String, Box<OcamlExpr>, Box<OcamlExpr>),
LetRec(String, Vec<String>, Box<OcamlExpr>, Box<OcamlExpr>),
IfThenElse(Box<OcamlExpr>, Box<OcamlExpr>, Box<OcamlExpr>),
Match(Box<OcamlExpr>, Vec<(OcamlPattern, OcamlExpr)>),
Tuple(Vec<OcamlExpr>),
List(Vec<OcamlExpr>),
Record(Vec<(String, OcamlExpr)>),
Field(Box<OcamlExpr>, String),
Module(String, Box<OcamlExpr>),
Begin(Vec<OcamlExpr>),
}Expand description
OCaml expression AST node.
Variants§
Lit(OcamlLit)
A literal value.
Var(String)
A variable or module path: x, List.map
BinOp(String, Box<OcamlExpr>, Box<OcamlExpr>)
A binary operation: a + b, a && b
UnaryOp(String, Box<OcamlExpr>)
A unary operation: not b, - n
App(Box<OcamlExpr>, Vec<OcamlExpr>)
Function application: f x or f x y (curried)
Lambda(Vec<String>, Box<OcamlExpr>)
A lambda: fun x -> body
Let(String, Box<OcamlExpr>, Box<OcamlExpr>)
A let binding: let x = e1 in e2
LetRec(String, Vec<String>, Box<OcamlExpr>, Box<OcamlExpr>)
A recursive let binding: let rec f x = e1 in e2
IfThenElse(Box<OcamlExpr>, Box<OcamlExpr>, Box<OcamlExpr>)
If-then-else: if cond then e1 else e2
Match(Box<OcamlExpr>, Vec<(OcamlPattern, OcamlExpr)>)
Match expression: match e with | p1 -> e1 | p2 -> e2
Tuple(Vec<OcamlExpr>)
Tuple: (e1, e2, ...)
List(Vec<OcamlExpr>)
List literal: [e1; e2; ...]
Record(Vec<(String, OcamlExpr)>)
Record literal: { field1 = e1; field2 = e2; ... }
Field(Box<OcamlExpr>, String)
Record field access: e.field
Module(String, Box<OcamlExpr>)
Module expression: Module.expr
Begin(Vec<OcamlExpr>)
begin ... end block (sequence of expressions)
Trait Implementations§
impl StructuralPartialEq for OcamlExpr
Auto Trait Implementations§
impl Freeze for OcamlExpr
impl RefUnwindSafe for OcamlExpr
impl Send for OcamlExpr
impl Sync for OcamlExpr
impl Unpin for OcamlExpr
impl UnsafeUnpin for OcamlExpr
impl UnwindSafe for OcamlExpr
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more