defmodule Cldr.Enum do @doc """ Very simple reduce that passes both the head and the tail to the reducing function so it has some lookahead. """ def reduce_peeking(_list, {:halt, acc}, _fun), do: {:halted, acc} def reduce_peeking(list, {:suspend, acc}, fun), do: {:suspended, acc, &reduce_peeking(list, &1, fun)} def reduce_peeking([], {:cont, acc}, _fun), do: {:done, acc} def reduce_peeking([head | tail], {:cont, acc}, fun), do: reduce_peeking(tail, fun.(head, tail, acc), fun) def reduce_peeking(list, acc, fun), do: reduce_peeking(list, {:cont, acc}, fun) |> elem(1) def combine_list([head]), do: [to_string(head)] def combine_list([head | [next | tail]]), do: [to_string(head) | combine_list(["#{head}_#{next}" | tail])] end