Oh man that's tricky.  The trouble is that you're effectively saying 
`Pair{Symbol,Int}[1]`, which is the syntax for a typed array: 
Pair{Symbol,Int}[:x=>1, :y=>2].  One way around this is to define:

keytype{A,B}(::Type{Pair{A,B}}) = A
valuetype{A,B}(::Type{Pair{A,B}}) = B
pairtypes{A,B}(::Type{Pair{A,B}}) = (A,B)

If you need this to work on 0.3, too, you can easily make these functions 
work for the old-style Tuples, too.

On Thursday, September 3, 2015 at 9:06:30 AM UTC-4, Michael Francis wrote:
>
> Incidentally
>
> eltype( Pair{String,Float64} )
>
> gives Any, that seems slightly strange as well . 
>
> On Thursday, September 3, 2015 at 9:02:33 AM UTC-4, Michael Francis wrote:
>>
>> julia> eltype( Dict( :x => 1, :y => 2 ) )[1]
>> ERROR: MethodError: `convert` has no method matching convert(::Type{Pair{
>> Symbol,Int64}}, ::Int64)
>> This may have arisen from a call to the constructor Pair{Symbol,Int64
>> }(...),
>> since type constructors fall back to convert methods.
>> Closest candidates are:
>>   Pair{A,B}(::Any, ::Any)
>>   call{T}(::Type{T}, ::Any)
>>   convert{T}(::Type{T}, ::T)
>>  in getindex at array.jl:167
>>
>>
>> Is this intentional ? This breaks a package I am dependent on - I believe 
>> the assumption was that Pair would respect the tuple API, this appears to 
>> not be the case ? 
>>
>> collect( eltype( Dict( :x => 1, :y => 2 ) ) )
>> ERROR: MethodError: `start` has no method matching start(::Type{Pair{
>> Symbol,Int64}})
>>  in collect at array.jl:255
>>  in collect at array.jl:262
>>
>>
>>

Reply via email to