See also https://github.com/JuliaLang/julia/issues/6561

On Monday, July 14, 2014 10:48:42 AM UTC-4, Mauro wrote:
>
> Using type parameters works for me: 
>
> julia> f{T<:Float64}(a::Array{(T,T)}) = eltype(a) 
> f (generic function with 1 method) 
>
> julia> f([(3.,4.), (4.,5.)]) 
> (Float64,Float64) 
>
> julia> f{T<:Tuple}(a::Array{T}) = eltype(a) 
> f (generic function with 2 methods) 
>
> julia> f([(3,4), (4,5)]) 
> (Int64,Int64) 
>
> The reason is invariance of parametric types.  Tuple is an abstact type, 
> this means that for parametric types (which arrays also belong to): 
> "Even though (Float64,Float64) <: Tuple we DO NOT have 
> Array{(Float64,Float64)} <: Array{Tuple}" 
>
> (citing the manual: 
>
> http://docs.julialang.org/en/latest/manual/types/#parametric-composite-types) 
>
>
> (A side note: tuples themselves are covariant.  E.g. (Int,) <: (Real,) ) 
>
> Last, why this worked for tuples before, I don't know.  Presumably it 
> was a bug and now got fixed. 
>
> On Mon, 2014-07-14 at 12:01, David van Leeuwen <[email protected] 
> <javascript:>> wrote: 
> > Hello, 
> > 
> > Somewhere in the last 150 days the value of 
> > 
> > Array{(Float64,Float64)} <: Array{Tuple} 
> > 
> > changed from "true" to "false".  There may be good reasons for that, I 
> > can't tell. 
> > 
> > I would like to specify as a function argument something of the type 
> > Array{Tuple}, but I can't get that matched any more.  I don't know how 
> to 
> > make the function type more specific so that it will match again, i.e., 
> I 
> > don't know how to specify the types withing the tuple.  A naive 
> > Array{Tuple{Float64,Float64}} does not work. 
> > 
> > Any ideas? 
> > 
> > Thanks 
> > 
> > ---david 
>

Reply via email to