Scalc.AstSourceand naked_expr = | EVar of VarName.t| EFunc of FuncName.t| EStruct of {fields : expr Shared_ast.StructField.Map.t;name : Shared_ast.StructName.t;}| EStructFieldAccess of {e1 : expr;field : Shared_ast.StructField.t;name : Shared_ast.StructName.t;}| ETuple of expr list| ETupleAccess of {e1 : expr;index : int;}| EInj of {e1 : expr;cons : Shared_ast.EnumConstructor.t;name : Shared_ast.EnumName.t;expr_typ : Shared_ast.typ;}| EArray of expr list| ELit of Shared_ast.lit| EApp of {}| EAppOp of {op : operator Catala_utils.Mark.pos;args : expr list;}| EExternal of {modname : VarName.t Catala_utils.Mark.pos;name : string Catala_utils.Mark.pos;}type stmt = | SInnerFuncDef of {name : VarName.t Catala_utils.Mark.pos;func : func;}| SLocalDecl of {name : VarName.t Catala_utils.Mark.pos;typ : Shared_ast.typ;}| SLocalInit of {name : VarName.t Catala_utils.Mark.pos;typ : Shared_ast.typ;expr : expr;}| SLocalDef of {name : VarName.t Catala_utils.Mark.pos;expr : expr;typ : Shared_ast.typ;}| STryWEmpty of {}| SRaiseEmpty| SFatalError of Shared_ast.Runtime.error| SIfThenElse of {}| SSwitch of {switch_expr : expr;switch_expr_typ : Shared_ast.typ;enum_name : Shared_ast.EnumName.t;switch_cases : switch_case list;}| SReturn of naked_expr| SAssert of naked_expr| SSpecialOp of special_operatorand special_operator = | OHandleDefaultOpt of {exceptions : expr list;just : expr;cons : block;return_typ : Shared_ast.typ;}and switch_case = {case_block : block;payload_var_name : VarName.t;payload_var_typ : Shared_ast.typ;}and func = {func_params : (VarName.t Catala_utils.Mark.pos * Shared_ast.typ) list;func_body : block;func_return_typ : Shared_ast.typ;}type scope_body = {scope_body_name : Shared_ast.ScopeName.t;scope_body_var : FuncName.t;scope_body_func : func;}type code_item = | SVar of {var : VarName.t;expr : expr;typ : Shared_ast.typ;}| SFunc of {var : FuncName.t;func : func;}| SScope of scope_bodytype program = {ctx : ctx;code_items : code_item list;module_name : Shared_ast.ModuleName.t option;}