If the list always has one string inside, you can do:
iex(1)> map = %{email: ["Nie może być puste."], password: ["Nie może być puste."],
...(1)> password_confirmation: ["Nie może być puste."]}
%{email: ["Nie może być puste."], password: ["Nie może być puste."],
password_confirmation: ["Nie może być puste."]}
iex(2)> for {k, [v]} <- map, into: %{}, do: {k, v}
%{email: "Nie może być puste.", password: "Nie może być puste.",
password_confirmation: "Nie może być puste."}
If the list can have multiple strings, you can join them like this:
iex(3)> map = %{email: ["Nie może być puste.", "Nie może być puste."],
...(3)> password_confirmation: ["Nie może być puste."]}
%{email: ["Nie może być puste.", "Nie może być puste."],
password_confirmation: ["Nie może być puste."]}
iex(4)> for {k, v} <- map, into: %{}, do: {k, Enum.join(v, " ")}
%{email: "Nie może być puste. Nie może być puste.",
password_confirmation: "Nie może być puste."}
for {k, [v]} <- your_map, into: %{}, do: {k, v}would be my answer if it's guaranteed that the list contains one item.your_map |> Stream.map(fn {k, v} -> {k, IO.iodata_to_binary(v)} end) |> Enum.into(%{})