defmodule StringReducer do def reduce(str, initial_val, fun), do: traverse(str, initial_val, fun) defp traverse("", acc, _), do: acc defp traverse(<>, acc, fun), do: traverse(rest, fun.(<>, acc), fun) end