Pair is a parametric type, and in Julia these are invariant, meaning element subtyping does not imply pair subtyping.
In your case, the pair elements are subtypes: Tuple{Function,Int,Int,Int} <: Tuple{Function,Vararg{Int}} # true Int <: Int # true but the Pair is not: Pair{Tuple{Function,Int,Int,Int}, Int} <: Pair{Tuple{Function,Vararg{Int}}, Int} # false On Wednesday, April 6, 2016 at 4:51:39 AM UTC+10, Seth wrote: > Hi all, > > I have the following on 0.4.6-pre+18: > > z = [Pair((+,1,5,7), 3), Pair((-,6,5,3,5,8), 1)] > type Foo > x::Array{Pair{Tuple{Function, Vararg{Int}}, Int}} > end > > > and I'm getting > > julia> Foo(z) > ERROR: MethodError: `convert` has no method matching > convert(::Type{Pair{Tuple{Function,Vararg{Int64}},Int64}}, > ::Pair{Tuple{Function,Int64,Int64,Int64},Int64}) > This may have arisen from a call to the constructor > Pair{Tuple{Function,Vararg{Int64}},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 copy! at abstractarray.jl:310 > in call at none:2 > > > It's probably a stupid oversight, but I'm stuck. Can someone point me to > the error? >