For docs - are we performing in place updates to collections.rst ?
On Thursday, September 3, 2015 at 10:04:22 AM UTC-4, Michael Francis wrote: > > I will likely do so, it's quite a common action to take. > > Fortunately with typeof( ( 1,2 ) ) == Tuple{Int64,Int64} there is a > significantly greater consistency in 0.4 vs 0.3 > > Though how would one correctly access the 'nth' elements type ? > > It brings up a question regarding parameterized types, how should (or > should) one access/refer to the parameters of the type rather than an > instance. It seems like a bad (queezy) practice to dig into the parameters > of a type? > > On Thursday, September 3, 2015 at 9:41:18 AM UTC-4, Tim Holy wrote: >> >> base/dict.jl defines keytype and valtype, but they are not exported. You >> could >> file a pull request that exports them (it would be a 2-line patch, though >> you >> might want to add a test to make sure they stay exported). >> >> --Tim >> >> On Thursday, September 03, 2015 06:37:02 AM Michael Francis wrote: >> > In the short term I have defined the following in the offending package >> for >> > v0.4 only >> > >> > function keytype( dict ) >> > return eltype( dict ).parameters[1] >> > end >> > >> > I agree that a standard protocol of accessing the key and value types >> of a >> > pair / associative is the way to go. >> > >> > On Thursday, September 3, 2015 at 9:31:39 AM UTC-4, Matt Bauman wrote: >> > > 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 >> >>