#[derive(Debug)]
pub struct SrcModule(pub Vec<SrcItem>);
#[derive(Debug)]
pub struct SrcIdent(pub String);
#[derive(Debug)]
pub enum SrcItem {
Def(SrcIdent, Option<SrcType>, Option<SrcExpr>),
}
#[derive(Debug)]
pub enum SrcStmt {
BlockStmt(Vec<Box<SrcStmt>>),
ExprStmt(Box<SrcExpr>),
}
#[derive(Debug)]
pub enum SrcExpr {
IntegerLiteral(i64),
StringLiteral(String),
ParenExpr(Box<SrcExpr>),
FunctionExpr(Vec<(SrcIdent, SrcType)>, SrcType, SrcStmt),
}
#[derive(Debug)]
pub enum SrcType {
NamedType(SrcIdent),
ArraowType(Vec<Box<SrcType>>, Box<SrcType>),
}