Polymorphic types is something supported by Dialyzer and well known in the erlang ecosystem:
Without them you would not be able to have things like [String.t]
in Elixir, for example.
We have the tools. The tools have the power. Its just a matter of understanding them (or fixing them).