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.

Reply via email to