DefinitionTree {
    definitions: [
        Function(
            FunctionDefinition {
                comments: CommentGroup {
                    comments: [],
                },
                attributes: [],
                function: Keyword {
                    value: "function",
                    position: 0,
                },
                name: Identifier {
                    position: 9,
                    value: "foo",
                },
                templates: None,
                parameters: FunctionLikeParameterListDefinition {
                    comments: CommentGroup {
                        comments: [],
                    },
                    left_parenthesis: 12,
                    parameters: CommaSeparated {
                        inner: [],
                        commas: [],
                    },
                    right_parenthesis: 13,
                },
                return_type: FunctionLikeReturnTypeDefinition {
                    colon: 14,
                    type_definition: Vec(
                        Keyword {
                            value: "vec",
                            position: 16,
                        },
                        TypeTemplateGroupDefinition {
                            comments: CommentGroup {
                                comments: [],
                            },
                            less_than: 19,
                            members: CommaSeparated {
                                inner: [
                                    SignedInteger(
                                        Default(
                                            Keyword {
                                                value: "int",
                                                position: 20,
                                            },
                                        ),
                                    ),
                                ],
                                commas: [],
                            },
                            greater_than: 23,
                        },
                    ),
                },
                body: BlockStatement {
                    comments: CommentGroup {
                        comments: [],
                    },
                    left_brace: 25,
                    statements: [
                        Expression(
                            ExpressionStatement {
                                comments: CommentGroup {
                                    comments: [],
                                },
                                expression: AssignmentOperation(
                                    Assignment {
                                        comments: CommentGroup {
                                            comments: [],
                                        },
                                        left: Variable(
                                            Variable {
                                                position: 31,
                                                name: "$a",
                                            },
                                        ),
                                        equals: 34,
                                        right: TypeOperation(
                                            As {
                                                comments: CommentGroup {
                                                    comments: [],
                                                },
                                                left: Variable(
                                                    Variable {
                                                        position: 36,
                                                        name: "$b",
                                                    },
                                                ),
                                                as: Keyword {
                                                    value: "as",
                                                    position: 39,
                                                },
                                                right: String(
                                                    Keyword {
                                                        value: "string",
                                                        position: 42,
                                                    },
                                                ),
                                            },
                                        ),
                                    },
                                ),
                                semicolon: 48,
                            },
                        ),
                        Expression(
                            ExpressionStatement {
                                comments: CommentGroup {
                                    comments: [],
                                },
                                expression: AssignmentOperation(
                                    Assignment {
                                        comments: CommentGroup {
                                            comments: [],
                                        },
                                        left: Variable(
                                            Variable {
                                                position: 54,
                                                name: "$a",
                                            },
                                        ),
                                        equals: 57,
                                        right: TypeOperation(
                                            Into {
                                                comments: CommentGroup {
                                                    comments: [],
                                                },
                                                left: Variable(
                                                    Variable {
                                                        position: 59,
                                                        name: "$b",
                                                    },
                                                ),
                                                into: Keyword {
                                                    value: "into",
                                                    position: 62,
                                                },
                                                right: String(
                                                    Keyword {
                                                        value: "string",
                                                        position: 67,
                                                    },
                                                ),
                                            },
                                        ),
                                    },
                                ),
                                semicolon: 73,
                            },
                        ),
                        Expression(
                            ExpressionStatement {
                                comments: CommentGroup {
                                    comments: [],
                                },
                                expression: AssignmentOperation(
                                    Assignment {
                                        comments: CommentGroup {
                                            comments: [],
                                        },
                                        left: Variable(
                                            Variable {
                                                position: 79,
                                                name: "$a",
                                            },
                                        ),
                                        equals: 82,
                                        right: TypeOperation(
                                            As {
                                                comments: CommentGroup {
                                                    comments: [],
                                                },
                                                left: Variable(
                                                    Variable {
                                                        position: 84,
                                                        name: "$b",
                                                    },
                                                ),
                                                as: Keyword {
                                                    value: "as",
                                                    position: 87,
                                                },
                                                right: SignedInteger(
                                                    Default(
                                                        Keyword {
                                                            value: "int",
                                                            position: 90,
                                                        },
                                                    ),
                                                ),
                                            },
                                        ),
                                    },
                                ),
                                semicolon: 93,
                            },
                        ),
                        Expression(
                            ExpressionStatement {
                                comments: CommentGroup {
                                    comments: [],
                                },
                                expression: AssignmentOperation(
                                    Assignment {
                                        comments: CommentGroup {
                                            comments: [],
                                        },
                                        left: Variable(
                                            Variable {
                                                position: 99,
                                                name: "$a",
                                            },
                                        ),
                                        equals: 102,
                                        right: TypeOperation(
                                            Into {
                                                comments: CommentGroup {
                                                    comments: [],
                                                },
                                                left: Variable(
                                                    Variable {
                                                        position: 104,
                                                        name: "$b",
                                                    },
                                                ),
                                                into: Keyword {
                                                    value: "into",
                                                    position: 107,
                                                },
                                                right: SignedInteger(
                                                    Default(
                                                        Keyword {
                                                            value: "int",
                                                            position: 112,
                                                        },
                                                    ),
                                                ),
                                            },
                                        ),
                                    },
                                ),
                                semicolon: 115,
                            },
                        ),
                        Expression(
                            ExpressionStatement {
                                comments: CommentGroup {
                                    comments: [],
                                },
                                expression: AssignmentOperation(
                                    Assignment {
                                        comments: CommentGroup {
                                            comments: [],
                                        },
                                        left: Variable(
                                            Variable {
                                                position: 121,
                                                name: "$a",
                                            },
                                        ),
                                        equals: 124,
                                        right: TypeOperation(
                                            As {
                                                comments: CommentGroup {
                                                    comments: [],
                                                },
                                                left: Variable(
                                                    Variable {
                                                        position: 126,
                                                        name: "$b",
                                                    },
                                                ),
                                                as: Keyword {
                                                    value: "as",
                                                    position: 129,
                                                },
                                                right: FloatingPoint(
                                                    Default(
                                                        Keyword {
                                                            value: "float",
                                                            position: 132,
                                                        },
                                                    ),
                                                ),
                                            },
                                        ),
                                    },
                                ),
                                semicolon: 137,
                            },
                        ),
                        Expression(
                            ExpressionStatement {
                                comments: CommentGroup {
                                    comments: [],
                                },
                                expression: AssignmentOperation(
                                    Assignment {
                                        comments: CommentGroup {
                                            comments: [],
                                        },
                                        left: Variable(
                                            Variable {
                                                position: 143,
                                                name: "$a",
                                            },
                                        ),
                                        equals: 146,
                                        right: TypeOperation(
                                            Into {
                                                comments: CommentGroup {
                                                    comments: [],
                                                },
                                                left: Variable(
                                                    Variable {
                                                        position: 148,
                                                        name: "$b",
                                                    },
                                                ),
                                                into: Keyword {
                                                    value: "into",
                                                    position: 151,
                                                },
                                                right: FloatingPoint(
                                                    Default(
                                                        Keyword {
                                                            value: "float",
                                                            position: 156,
                                                        },
                                                    ),
                                                ),
                                            },
                                        ),
                                    },
                                ),
                                semicolon: 161,
                            },
                        ),
                        Expression(
                            ExpressionStatement {
                                comments: CommentGroup {
                                    comments: [],
                                },
                                expression: AssignmentOperation(
                                    Assignment {
                                        comments: CommentGroup {
                                            comments: [],
                                        },
                                        left: Variable(
                                            Variable {
                                                position: 167,
                                                name: "$a",
                                            },
                                        ),
                                        equals: 170,
                                        right: TypeOperation(
                                            As {
                                                comments: CommentGroup {
                                                    comments: [],
                                                },
                                                left: Variable(
                                                    Variable {
                                                        position: 172,
                                                        name: "$b",
                                                    },
                                                ),
                                                as: Keyword {
                                                    value: "as",
                                                    position: 175,
                                                },
                                                right: Boolean(
                                                    Keyword {
                                                        value: "bool",
                                                        position: 178,
                                                    },
                                                ),
                                            },
                                        ),
                                    },
                                ),
                                semicolon: 182,
                            },
                        ),
                        Expression(
                            ExpressionStatement {
                                comments: CommentGroup {
                                    comments: [],
                                },
                                expression: AssignmentOperation(
                                    Assignment {
                                        comments: CommentGroup {
                                            comments: [],
                                        },
                                        left: Variable(
                                            Variable {
                                                position: 188,
                                                name: "$a",
                                            },
                                        ),
                                        equals: 191,
                                        right: TypeOperation(
                                            Into {
                                                comments: CommentGroup {
                                                    comments: [],
                                                },
                                                left: Variable(
                                                    Variable {
                                                        position: 193,
                                                        name: "$b",
                                                    },
                                                ),
                                                into: Keyword {
                                                    value: "into",
                                                    position: 196,
                                                },
                                                right: Boolean(
                                                    Keyword {
                                                        value: "bool",
                                                        position: 201,
                                                    },
                                                ),
                                            },
                                        ),
                                    },
                                ),
                                semicolon: 205,
                            },
                        ),
                        Expression(
                            ExpressionStatement {
                                comments: CommentGroup {
                                    comments: [],
                                },
                                expression: AssignmentOperation(
                                    Assignment {
                                        comments: CommentGroup {
                                            comments: [],
                                        },
                                        left: Variable(
                                            Variable {
                                                position: 211,
                                                name: "$a",
                                            },
                                        ),
                                        equals: 214,
                                        right: TypeOperation(
                                            As {
                                                comments: CommentGroup {
                                                    comments: [],
                                                },
                                                left: Variable(
                                                    Variable {
                                                        position: 216,
                                                        name: "$b",
                                                    },
                                                ),
                                                as: Keyword {
                                                    value: "as",
                                                    position: 219,
                                                },
                                                right: Vec(
                                                    Keyword {
                                                        value: "vec",
                                                        position: 222,
                                                    },
                                                    TypeTemplateGroupDefinition {
                                                        comments: CommentGroup {
                                                            comments: [],
                                                        },
                                                        less_than: 225,
                                                        members: CommaSeparated {
                                                            inner: [
                                                                SignedInteger(
                                                                    Default(
                                                                        Keyword {
                                                                            value: "int",
                                                                            position: 226,
                                                                        },
                                                                    ),
                                                                ),
                                                            ],
                                                            commas: [],
                                                        },
                                                        greater_than: 229,
                                                    },
                                                ),
                                            },
                                        ),
                                    },
                                ),
                                semicolon: 230,
                            },
                        ),
                        Expression(
                            ExpressionStatement {
                                comments: CommentGroup {
                                    comments: [],
                                },
                                expression: AssignmentOperation(
                                    Assignment {
                                        comments: CommentGroup {
                                            comments: [],
                                        },
                                        left: Variable(
                                            Variable {
                                                position: 236,
                                                name: "$a",
                                            },
                                        ),
                                        equals: 239,
                                        right: TypeOperation(
                                            Into {
                                                comments: CommentGroup {
                                                    comments: [],
                                                },
                                                left: Variable(
                                                    Variable {
                                                        position: 241,
                                                        name: "$b",
                                                    },
                                                ),
                                                into: Keyword {
                                                    value: "into",
                                                    position: 244,
                                                },
                                                right: Vec(
                                                    Keyword {
                                                        value: "vec",
                                                        position: 249,
                                                    },
                                                    TypeTemplateGroupDefinition {
                                                        comments: CommentGroup {
                                                            comments: [],
                                                        },
                                                        less_than: 252,
                                                        members: CommaSeparated {
                                                            inner: [
                                                                SignedInteger(
                                                                    Default(
                                                                        Keyword {
                                                                            value: "int",
                                                                            position: 253,
                                                                        },
                                                                    ),
                                                                ),
                                                            ],
                                                            commas: [],
                                                        },
                                                        greater_than: 256,
                                                    },
                                                ),
                                            },
                                        ),
                                    },
                                ),
                                semicolon: 257,
                            },
                        ),
                        Expression(
                            ExpressionStatement {
                                comments: CommentGroup {
                                    comments: [],
                                },
                                expression: AssignmentOperation(
                                    Assignment {
                                        comments: CommentGroup {
                                            comments: [],
                                        },
                                        left: Variable(
                                            Variable {
                                                position: 263,
                                                name: "$a",
                                            },
                                        ),
                                        equals: 266,
                                        right: TypeOperation(
                                            As {
                                                comments: CommentGroup {
                                                    comments: [],
                                                },
                                                left: Variable(
                                                    Variable {
                                                        position: 268,
                                                        name: "$b",
                                                    },
                                                ),
                                                as: Keyword {
                                                    value: "as",
                                                    position: 271,
                                                },
                                                right: Union(
                                                    [
                                                        Vec(
                                                            Keyword {
                                                                value: "vec",
                                                                position: 274,
                                                            },
                                                            TypeTemplateGroupDefinition {
                                                                comments: CommentGroup {
                                                                    comments: [],
                                                                },
                                                                less_than: 277,
                                                                members: CommaSeparated {
                                                                    inner: [
                                                                        SignedInteger(
                                                                            Default(
                                                                                Keyword {
                                                                                    value: "int",
                                                                                    position: 278,
                                                                                },
                                                                            ),
                                                                        ),
                                                                    ],
                                                                    commas: [],
                                                                },
                                                                greater_than: 281,
                                                            },
                                                        ),
                                                        Dict(
                                                            Keyword {
                                                                value: "dict",
                                                                position: 283,
                                                            },
                                                            TypeTemplateGroupDefinition {
                                                                comments: CommentGroup {
                                                                    comments: [],
                                                                },
                                                                less_than: 287,
                                                                members: CommaSeparated {
                                                                    inner: [
                                                                        String(
                                                                            Keyword {
                                                                                value: "string",
                                                                                position: 288,
                                                                            },
                                                                        ),
                                                                        SignedInteger(
                                                                            Default(
                                                                                Keyword {
                                                                                    value: "int",
                                                                                    position: 296,
                                                                                },
                                                                            ),
                                                                        ),
                                                                    ],
                                                                    commas: [
                                                                        294,
                                                                    ],
                                                                },
                                                                greater_than: 299,
                                                            },
                                                        ),
                                                        Tuple {
                                                            left_parenthesis: 301,
                                                            type_definitions: CommaSeparated {
                                                                inner: [
                                                                    String(
                                                                        Keyword {
                                                                            value: "string",
                                                                            position: 302,
                                                                        },
                                                                    ),
                                                                    SignedInteger(
                                                                        Default(
                                                                            Keyword {
                                                                                value: "int",
                                                                                position: 310,
                                                                            },
                                                                        ),
                                                                    ),
                                                                ],
                                                                commas: [
                                                                    308,
                                                                ],
                                                            },
                                                            right_parenthesis: 313,
                                                        },
                                                    ],
                                                ),
                                            },
                                        ),
                                    },
                                ),
                                semicolon: 314,
                            },
                        ),
                        Expression(
                            ExpressionStatement {
                                comments: CommentGroup {
                                    comments: [],
                                },
                                expression: AssignmentOperation(
                                    Assignment {
                                        comments: CommentGroup {
                                            comments: [],
                                        },
                                        left: Variable(
                                            Variable {
                                                position: 320,
                                                name: "$a",
                                            },
                                        ),
                                        equals: 323,
                                        right: TypeOperation(
                                            Into {
                                                comments: CommentGroup {
                                                    comments: [],
                                                },
                                                left: Variable(
                                                    Variable {
                                                        position: 325,
                                                        name: "$b",
                                                    },
                                                ),
                                                into: Keyword {
                                                    value: "into",
                                                    position: 328,
                                                },
                                                right: Union(
                                                    [
                                                        Vec(
                                                            Keyword {
                                                                value: "vec",
                                                                position: 333,
                                                            },
                                                            TypeTemplateGroupDefinition {
                                                                comments: CommentGroup {
                                                                    comments: [],
                                                                },
                                                                less_than: 336,
                                                                members: CommaSeparated {
                                                                    inner: [
                                                                        SignedInteger(
                                                                            Default(
                                                                                Keyword {
                                                                                    value: "int",
                                                                                    position: 337,
                                                                                },
                                                                            ),
                                                                        ),
                                                                    ],
                                                                    commas: [],
                                                                },
                                                                greater_than: 340,
                                                            },
                                                        ),
                                                        Dict(
                                                            Keyword {
                                                                value: "dict",
                                                                position: 342,
                                                            },
                                                            TypeTemplateGroupDefinition {
                                                                comments: CommentGroup {
                                                                    comments: [],
                                                                },
                                                                less_than: 346,
                                                                members: CommaSeparated {
                                                                    inner: [
                                                                        String(
                                                                            Keyword {
                                                                                value: "string",
                                                                                position: 347,
                                                                            },
                                                                        ),
                                                                        SignedInteger(
                                                                            Default(
                                                                                Keyword {
                                                                                    value: "int",
                                                                                    position: 355,
                                                                                },
                                                                            ),
                                                                        ),
                                                                    ],
                                                                    commas: [
                                                                        353,
                                                                    ],
                                                                },
                                                                greater_than: 358,
                                                            },
                                                        ),
                                                        Tuple {
                                                            left_parenthesis: 360,
                                                            type_definitions: CommaSeparated {
                                                                inner: [
                                                                    String(
                                                                        Keyword {
                                                                            value: "string",
                                                                            position: 361,
                                                                        },
                                                                    ),
                                                                    SignedInteger(
                                                                        Default(
                                                                            Keyword {
                                                                                value: "int",
                                                                                position: 369,
                                                                            },
                                                                        ),
                                                                    ),
                                                                ],
                                                                commas: [
                                                                    367,
                                                                ],
                                                            },
                                                            right_parenthesis: 372,
                                                        },
                                                    ],
                                                ),
                                            },
                                        ),
                                    },
                                ),
                                semicolon: 373,
                            },
                        ),
                    ],
                    right_brace: 375,
                },
            },
        ),
    ],
    eof: 377,
}