program main
  enum Color
    variant Red
    variant Blue
    variant Green
  fn make_palette() -> (array Color 3)
    array : (array Color 3)
      enum-variant Color.Red #0 : Color
      enum-variant Color.Blue #1 : Color
      enum-variant Color.Green #2 : Color
  fn echo_palette(colors: (array Color 3)) -> (array Color 3)
    var colors : (array Color 3)
  fn at(colors: (array Color 3), i: i32) -> Color
    index : Color
      var colors : (array Color 3)
      var i : i32
  fn local_pick() -> Color
    local let colors : unit
      call make_palette : (array Color 3)
    index : Color
      var colors : (array Color 3)
      int 1 : i32
  fn main() -> i32
    match : i32
      subject
        call at : Color
          call make_palette : (array Color 3)
          int 1 : i32
      arm Color.Blue
        int 0 : i32
      arm Color.Red
        int 1 : i32
      arm Color.Green
        int 1 : i32
  test "enum array immediate index"
    binary = : bool
      index : Color
        array : (array Color 3)
          enum-variant Color.Red #0 : Color
          enum-variant Color.Blue #1 : Color
          enum-variant Color.Green #2 : Color
        int 2 : i32
      enum-variant Color.Green #2 : Color
  test "enum array local index"
    binary = : bool
      call local_pick : Color
      enum-variant Color.Blue #1 : Color
  test "enum array param return dynamic index"
    binary = : bool
      call at : Color
        call echo_palette : (array Color 3)
          call make_palette : (array Color 3)
        int 0 : i32
      enum-variant Color.Red #0 : Color
