You are getting the error because tail is a list, but you are passing it to split/2 which expects the first argument to be a string. split/2 takes tail and tries to call String.split/2, which then throws an error because it expects its first argument to be a string, not a list.
If you simply want to split a string into lists of three characters, I can think of ways that are simpler, but using this approach I would suggest:
def split("", final_list), do: Enum.reverse(final_list)
def split(string, final_list) do
{first_three_characters, rest_of_word} = String.split_at(string, 3)
split(rest_of_word, [first_three_characters | final_list])
end






















