Anonymous functions equality comparison

By “environment variables” do you mean the variables captured in the closure of this anonymous function?

Using the following compiled code:

defmodule MyModule do
 def fun_1 do
   fn x -> x end
 end

 def fun_2 do
   fn x -> x end
 end

 def compare_1 do
   ((fn x -> x end) == (fn x -> x end)) |> IO.inspect()
 end

 def compare_2 do
   (fn x -> x end) |> Function.info() |> IO.inspect()
   (fn x -> x end) |> Function.info() |> IO.inspect()
   :ok
 end
end

iex -S mix:

iex> MyModule.fun_1() |> Function.info()
[
  pid: #PID<0.252.0>,
  module: MyModule,
  new_index: 0,
  new_uniq: <<93, 38, 53, 241, 226, 42, 107, 201, 80, 47, 228, 61, 192, 123,
    202, 1>>,
  index: 0,
  uniq: 48837039,
  name: :"-fun_1/0-fun-0-",
  arity: 1,
  env: [],
  type: :local
]
iex> MyModule.fun_2() |> Function.info()
[
  pid: #PID<0.252.0>,
  module: MyModule,
  new_index: 1,
  new_uniq: <<93, 38, 53, 241, 226, 42, 107, 201, 80, 47, 228, 61, 192, 123,
    202, 1>>,
  index: 1,
  uniq: 48837039,
  name: :"-fun_2/0-fun-0-",
  arity: 1,
  env: [],
  type: :local
]
iex> MyModule.compare_1()
false
iex> MyModule.compare_2()
[
  pid: #PID<0.251.0>,
  module: MyModule,
  new_index: 2,
  new_uniq: <<122, 234, 246, 244, 241, 108, 55, 10, 70, 250, 99, 174, 106, 44,
    101, 226>>,
  index: 2,
  uniq: 64444343,
  name: :"-compare_2/0-fun-0-",
  arity: 1,
  env: [],
  type: :local
]
[
  pid: #PID<0.251.0>,
  module: MyModule,
  new_index: 3,
  new_uniq: <<122, 234, 246, 244, 241, 108, 55, 10, 70, 250, 99, 174, 106, 44,
    101, 226>>,
  index: 3,
  uniq: 64444343,
  name: :"-compare_2/0-fun-1-",
  arity: 1,
  env: [],
  type: :local
]
:ok

Looks like the functions will always differ at least in new_index or index (?)