Imagine actually using Enum.get/3 While it’s doable, to me, it’s counter-intuitive – a dev wants to know what is the data structure being gotten from.
By contrast, Map.reduce/2-3 and Keyword.reduce/2-3 would suck because the operation has a different goal. It works on all entries of the collection; it doesn’t just fetch one.
Most of the contributions I’ve made to the Elixir core code have been contributions to the docs so once you get an answer, I encourage you to fork the Elixir core code and add what you need.
Keyword and Map are Enumerable in the sense that you can sensibly go through each entry one at a time. However they are also key value data structures. There will be a variety of same name functions related to the fact that they are both key value data structures that have nothing to do with iterating through collections.
Enum does not exist as a one stop shop of “every function that applies to multiple data structures”. It is specifically about manipulating Enumerable structures in their capacity of being enumerable.
If you want to create a function that covers Keyword.drop/2 and Map.drop/2 you would need to create something like Enum.drop_by_key/2. The thing is that it will not work for Enumerables that don’t have a key/value structure (as @benwilson512 said).
Remember maps are unordered data structures so many of the functions related to order in the Enum module will give unexpected results in maps and structs, such as Enum.drop/2 or Enum.take/2
Apart from everything that has already been said, I also think it’s a “syntax vs semantics” issue - that is, drop as a name plays the role of syntax while the module name adds context to define the desired semantics.