I have put more thoughts into this. If our goal is to have something that can be easily sortable, computed a max and a min, etc, then the best option is to introduce a sortable function:
sortable(date) :: term() The goal of this function is to return a sortable term, according to Erlang Term Ordering. Then we can do: Enum.sort_by(datetimes, &Date.sortable/1) Enum.min_by(datetimes, &Date.sortable/1) Enum.max_by(datetimes, &Date.sortable/1) If you want to sort users by their update date: Enum.sort_by(users, & &1.updated_at |> Date.sortable()) Enum.min_by(users, & &1.updated_at |> Date.sortable()) Enum.max_by(users, & &1.updated_at |> Date.sortable()) The only downside of this implementation is that it may not be as efficient because we will have to convert to iso days so they are sortable across calendars. === There is a longer discussion here about introducing a new protocol, called Ordered, and an Enum.order/1 function. Then Enum.order(dates) would automatically work, because it would dispatch to a protocol which is always correct. This is all good on paper but I can foresee two downsides: 1. We would need to introduce an "Ordered" version of min/max. Perhaps something like order_first/order_last or order_min/order_max. 2. I am not aware of any prior art on this. Most of the protocols/typeclasses/interfaces I know for ordering build them based on comparisons. Is anyone aware of a reference on the topic? Thoughts? -- You received this message because you are subscribed to the Google Groups "elixir-lang-core" group. To unsubscribe from this group and stop receiving emails from it, send an email to elixir-lang-core+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/56a992a6-0ae1-4d67-9145-dbee40935bae%40googlegroups.com.