I agree with Eric Meadows-Jönnson. Making the typing more general shouldn't introduce incompatible changes.
Indices are only used in a few places inside Enum. Access talks about 'keys' which can be anyting. An Index can only be an integer, but it is possible to pass a negative integer to functions like Enum.fetch/2, which will then be 'counted from the end'. I think that either we want to deprecate Enum.index/0 because it does not add a lot more information over just using `integer` or `non_neg_integer` as type. In fact, because of above-stated ambiguity, one might argue that using `integer` or `non_neg_integer` is more explicit. Or, we want to make it more general, so it can be used in more places such as Enum.fetch. In fact, it is somewhat strange that functions like `Enum.with_index` do not use `Enum.index` in their return typing. This might be a hint that it is superfluous and could be deprecated/at some point removed. On Tuesday, July 5, 2016 at 4:30:52 AM UTC+2, Eric Meadows-Jönsson wrote: > > I'm not sure what backwards compatibility means when it comes to typespecs > or if we have any rules for it in Elixir. All code still works the same way > when changes are made to typespecs so what is the potential > incompatibility? External tools (like dialyzer) may be affected but we > don't control those and they can chose to interpret typespecs however they > want. > > I don't think making a typespec less restrictive is a backwards > incompatible change if no APIs change. It also depends on if the type is > used as arguments to functions or as return values. Accepting more values > in arguments is backwards compatible, but returning more types of values is > not. > > The solution might be to instead deprecate Enum.index/0 if there is no > common type that makes sense for all indexes Elixir use. > > On Mon, Jul 4, 2016 at 6:37 PM, eksperimental <[email protected] > <javascript:>> wrote: > >> I just noticed that the Enum.index/0 type is set to `non_neg_integer`, >> the thing is that indexes are `integer`. >> >> as of now, it is only used one in the whole elixir code base, >> in Enum.find_index/2 >> >> The rest of the times, when we need to represent an index, we need to >> use `integer`, >> I know this change is backward incompatible (and probably have to wait >> until Elixir v2.0), as other libraries/apps may rely on >> Enum.index/0, >> >> but it would make a lot of sense to change it to `integer` and update >> Enum.find_index/2 to use `non_neg_integer` instead of index/0. >> >> -- >> 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 [email protected] <javascript:>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/elixir-lang-core/20160704233754.6acc2ca5.eksperimental%40autistici.org >> . >> For more options, visit https://groups.google.com/d/optout. >> > > > > -- > Eric Meadows-Jönsson > -- 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 [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/632e66b0-78bc-4d7a-8651-ff0a137a1d99%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
