[
    {
        "kind": "module",
        "id": "mod-math-001",
        "name": "math",
        "imports": [],
        "definitions": [
            {
                "kind": "fn",
                "id": "fn-add-001",
                "name": "add",
                "params": [
                    { "kind": "param", "id": "p-a-001", "name": "a", "type": { "kind": "basic", "name": "Int" } },
                    { "kind": "param", "id": "p-b-001", "name": "b", "type": { "kind": "basic", "name": "Int" } }
                ],
                "effects": ["pure"],
                "returnType": { "kind": "basic", "name": "Int" },
                "contracts": [
                    {
                        "kind": "post",
                        "id": "post-add-001",
                        "condition": {
                            "kind": "binop", "id": "cmp-add-001", "op": "==",
                            "left": { "kind": "ident", "id": "id-result-001", "name": "result" },
                            "right": {
                                "kind": "binop", "id": "binop-sum-001", "op": "+",
                                "left": { "kind": "ident", "id": "id-a-post-001", "name": "a" },
                                "right": { "kind": "ident", "id": "id-b-post-001", "name": "b" }
                            }
                        }
                    }
                ],
                "body": [
                    {
                        "kind": "binop",
                        "id": "binop-add-001",
                        "op": "+",
                        "left": { "kind": "ident", "id": "id-a-001", "name": "a" },
                        "right": { "kind": "ident", "id": "id-b-001", "name": "b" }
                    }
                ]
            }
        ]
    },
    {
        "kind": "module",
        "id": "mod-main-001",
        "name": "main",
        "imports": [
            { "kind": "import", "id": "imp-math-001", "module": "math", "names": ["add"] }
        ],
        "definitions": [
            {
                "kind": "fn",
                "id": "fn-main-001",
                "name": "main",
                "params": [],
                "effects": ["io"],
                "returnType": { "kind": "basic", "name": "Int" },
                "contracts": [],
                "body": [
                    {
                        "kind": "call",
                        "id": "call-add-001",
                        "fn": { "kind": "ident", "id": "id-add-001", "name": "add" },
                        "args": [
                            { "kind": "literal", "id": "lit-2-001", "value": 2 },
                            { "kind": "literal", "id": "lit-3-001", "value": 3 }
                        ]
                    }
                ]
            }
        ]
    }
]
