{
  "schema": "ailang/v0",
  "name": "fn_with_do_seq",
  "imports": [],
  "defs": [
    {
      "kind": "fn",
      "name": "main",
      "doc": "Print two Ints in sequence. Exercises TermDo, TermSeq, and the IO effect on a fn type. The trailing unit return is implicit in the last Do (op returns Unit).",
      "type": {
        "k": "fn",
        "params": [],
        "param_modes": [],
        "ret": {
          "k": "con",
          "name": "Unit"
        },
        "ret_mode": "own",
        "effects": [
          "IO"
        ]
      },
      "params": [],
      "body": {
        "t": "seq",
        "lhs": {
          "t": "seq",
          "lhs": {
            "t": "do",
            "op": "io/print_str",
            "args": [
              {
                "t": "app",
                "fn": {
                  "t": "var",
                  "name": "int_to_str"
                },
                "args": [
                  {
                    "t": "lit",
                    "lit": {
                      "kind": "int",
                      "value": 1
                    }
                  }
                ]
              }
            ]
          },
          "rhs": {
            "t": "do",
            "op": "io/print_str",
            "args": [
              {
                "t": "lit",
                "lit": {
                  "kind": "str",
                  "value": "\n"
                }
              }
            ]
          }
        },
        "rhs": {
          "t": "seq",
          "lhs": {
            "t": "do",
            "op": "io/print_str",
            "args": [
              {
                "t": "app",
                "fn": {
                  "t": "var",
                  "name": "int_to_str"
                },
                "args": [
                  {
                    "t": "lit",
                    "lit": {
                      "kind": "int",
                      "value": 2
                    }
                  }
                ]
              }
            ]
          },
          "rhs": {
            "t": "do",
            "op": "io/print_str",
            "args": [
              {
                "t": "lit",
                "lit": {
                  "kind": "str",
                  "value": "\n"
                }
              }
            ]
          }
        }
      }
    }
  ]
}
