The explanation that made me stop suggesting that `Sometype{T1} <:
Sometype{T2} if T1<:T2` was the following function:
function foo( a::Array{Any, 1})
# I can now get objects from the array, and they will be subtypes of Any
b = a[1]
# And I can insert Any object into the array
push!(a, STDIN)
end
This function will not work if I call `foo([1.:6.])` because the array will
be of type `Array{Float64, 1}`, but if we changed Julia to allow such
constructs, it would fail when you push STDIN onto a Float64 array. So in
essence the difference is whether the argument type should match for
reading or writing.
Ivar
kl. 06:04:48 UTC+1 torsdag 27. november 2014 skrev K leo følgende:
>
> Thanks, now I understand it.
>
> The problem I had was this, which I imagine to exist with many other
> non-computer scientists new to Julia.
>
> This topic is discussed under the parametric type section of the manual,
> and since I had not attempted to use parametric types (the things with
> the mysterious T), I didn't bother to read that section. I ran into the
> problem with mostly arrays, and it is not obvious that things like
> Array{Any,1} is a parametric type. So it became very strange to me when
> Array{Int,1} can not be passed in the place of Array{Any,1}.
>
> On 2014年11月27日 12:19, [email protected] <javascript:> wrote:
> > It is demonstrated in the manual at
> >
> http://docs.julialang.org/en/release-0.3/manual/types/#parametric-composite-types
>
> > that parametric types do not have any relationship even if their
> > parameter types have some relationship. Perhaps it would be better
> > emphasise that and to explain it simply and clearly for the
> > non-*computer* scientists as something like:
> >
> > Two parametric types Sometype{T1} and Sometype{T2} have no subtype or
> > supertype relationship even if T1 has a subtype or supertype
> > relationship to T2.
> >
> > Cheers
> > Lex
> >
> > On Thursday, November 27, 2014 1:37:53 PM UTC+10, John Myles White
> wrote:
> >
> > All types do have Any as a parent.
> >
> > It is clear that many people are confused about what covariance,
> > contravariance and invariance mean in computer science. As such, I
> > very strongly encourage everyone who isn't sure that they
> > understand Julia's type system to read through the wikipedia
> > article on covariance and contravariance:
> >
> http://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29
>
> > <
> http://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29>
>
>
> >
> >
> > Perhaps the Julia manual should have a "prerequisites" section
> > that lists all of the concepts that readers are assumed to already
> > understand.
> >
> > -- John
> >
> > On Nov 26, 2014, at 7:27 PM, K Leo <[email protected]
> > <javascript:>> wrote:
> >
> > > I ran into similar mental difficulty regarding whether type Any
> > is a superset of any other types. I did not find anything to
> > read, but simply accepted the fact through painstaking experiments.
> > >
> > > I think the word "Any" here is confusing. The English
> > definition of it means that it ought to include any types.
> > Perhaps we should seek other word to define this type. Word like
> > "Mixed" might be more appropriate for this?
> > >
> > > On 2014年11月27日 08:17, Patrick O'Leary wrote:
> > >>
> > >> You've hit type invariance. In Julia, parametric types are
> > invariant--that is, Dict{ASCIIString,Float64} is not a subtype of
> > Dict{ASCIIString,Any}.
> > >>
> > >> For more information on why we use invariant parametric types,
> > search the list for "parametric invariant" or similar; there have
> > been a few discussions on the topic.
> > >>
> > >> Patrick
> > >
> >
>
>