{
  "schema": "ailang/v0",
  "name": "t4_count_zeros",
  "imports": [],
  "defs": [
    {
      "kind": "type",
      "name": "List",
      "vars": ["a"],
      "doc": "Monomorphic Int list for this task.",
      "ctors": [
        { "name": "Nil", "fields": [] },
        {
          "name": "Cons",
          "fields": [
            { "k": "con", "name": "Int" },
            { "k": "con", "name": "List", "args": [ { "k": "var", "name": "a" } ] }
          ]
        }
      ]
    },
    {
      "kind": "fn",
      "name": "count_zeros",
      "doc": "Count how many elements equal 0 using the prelude Eq Int instance.",
      "type": {
        "k": "fn",
        "params": [
          { "k": "con", "name": "List", "args": [ { "k": "con", "name": "Int" } ]
        ],
        "param_modes": ["borrow"],
        "ret": { "k": "con", "name": "Int" },
        "ret_mode": "own",
        "effects": []
      },
      "params": ["xs"],
      "body": {
        "t": "match",
        "scrutinee": { "t": "var", "name": "xs" },
        "arms": [
          {
            "pat": { "p": "ctor", "ctor": "Nil", "fields": [] },
            "body": { "t": "lit", "lit": { "kind": "int", "value": 0 }
          },
          {
            "pat": {
              "p": "ctor",
              "ctor": "Cons",
              "fields": [
                { "p": "var", "name": "h" },
                { "p": "var", "name": "t" }
              ]
            },
            "body": {
              "t": "if",
              "cond": {
                "t": "app",
                "fn": { "t": "var", "name": "==" },
                "args": [
                  { "t": "var", "name": "h" },
                  { "t": "lit", "lit": { "kind": "int", "value": 0 }
                }
              },
              "then": {
                "t": "app",
                "fn": { "t": "var", "name": "+" },
                "args": [
                  { "t": "lit", "lit": { "kind": "int", "value": 1 } },
                  {
                    "t": "app",
                    "fn": { "t": "var", "name": "count_zeros" },
                    "args": [ { "t": "var", "name": "t" }
                  }
                ]
              },
              "else": {
                "t": "app",
                "fn": { "t": "var", "name": "count_zeros" },
                "args": [ { "t": "var", "name": "t" }
              }
            }
          }
        ]
      }
    },
    {
      "kind": "fn",
      "name": "main",
      "doc": "Print count_zeros(Nil) and count_zeros(Cons(0, Cons(5, Cons(0, Cons(3, Cons(0, Nil)))))) each on its own line.",
      "type": {
        "k": "fn",
        "params": [],
        "ret": { "k": "con", "name": "Unit" },
        "effects": ["IO"]
      },
      "params": [],
      "body": {
        "t": "seq",
        "lhs": {
          "t": "do",
          "op": "io/print_int",
          "args": [
            {
              "t": "app",
          "fn": { "t": "var", "name": "count_zeros" },
          "args": [ { "t": "var", "name": "Nil" }
        }
      }
    },
    "rhs": {
      "t": "do",
      "op": "io/print_int",
      "args": [
        {
          "t": "app",
          "fn": { "t": "var", "name": "count_zeros" },
          "args": [
            {
              "t": "ctor",
              "type": "List",
              "ctor": "Cons",
              "args": [
                { "t": "lit", "lit": { "kind": "int", "value": 0 } },
                {
                  "t": "ctor",
                  "type": "List",
                  "ctor": "Cons",
                  "args": [
                    { "t": "lit", "lit": { "kind": "int", "value": 5 } },
                    {
                      "t": "ctor",
                      "type": "List",
                      "ctor": "Cons",
                      "args": [
                        { "t": "lit", "lit": { "kind": "int", "value": 3 } },
                        {
                          "t": "ctor",
                      "type": "List",
                      "ctor": "Cons",
                      "args": [
                        { "t": "lit", "lit": { "kind": "int", "value": 0 } },
                      { "t": "var", "name": "Nil" }
                      ]
                    }
                  }
                }
              ]
            }
          ]
        }
      }
    }
  ]
}