Or is a custom function needed?
Something like (currently incorrect, doesn’t account for nested lists):
defmodule Comparer do
@moduledoc """
Equality comparison for iolists consisting of binaries.
"""
@spec equal?(iolist, iolist) :: boolean
def equal?(iolist1, iolist2)
def equal?(iolist1, iolist2) do
equal?(iolist1, iolist2, [])
end
defp equal?(
[<<char, rest_bin1::bytes>> | rest_iolist1],
[<<char, rest_bin2::bytes>> | rest_iolist2],
[]
) do
equal?([<<rest_bin1::bytes>> | rest_iolist1], [<<rest_bin2::bytes>> | rest_iolist2], [])
end
defp equal?(
[<<>> | rest_iolist1],
[<<>> | rest_iolist2],
[]
) do
equal?(rest_iolist1, rest_iolist2, [])
end
defp equal?(
[<<>> | rest_iolist1],
iolist2,
[]
) do
equal?(rest_iolist1, iolist2, [])
end
defp equal?(
iolist1,
[<<>> | rest_iolist2],
[]
) do
equal?(iolist1, rest_iolist2, [])
end
defp equal?(
[<<char, rest_bin1::bytes>> | rest_iolist1],
rest2,
[<<char, rest_bin3::bytes>> | rest_buffer2]
) do
equal?([<<rest_bin1::bytes>> | rest_iolist1], rest2, [<<rest_bin3::bytes>> | rest_buffer2])
end
defp equal?(
[<<>> | rest_iolist1],
rest2,
[<<>> | rest_buffer2]
) do
equal?(rest_iolist1, rest2, rest_buffer2)
end
defp equal?(
[<<>> | rest_iolist1],
rest2,
buffer2
) do
equal?(rest_iolist1, rest2, buffer2)
end
defp equal?([], [], []) do
true
end
defp equal?(_, _, _) do
false
end
end