The <: in Array{<:FloatingPoint} was meant to be evocative of the upper 
bound used in the typealias

    typealias FPArray{T<:FloatingPoint} Array{T}

Also note Array{<:FloatingPoint} that is more general (applies to more 
instances) than Array{FloatingPoint}. In fact,

    Array{FloatingPoint} <: Array{<:FloatingPoint}

But I guess it depends on how you look at it. Anyway, there seems to be 
starting a discussion about which case that Array{FloatingPoint} should 
stand for in the issue.

On Wednesday, 28 May 2014 18:08:26 UTC+2, gael....@gmail.com wrote:
>
> Shouldn't it behave the opposite way?
>
> Array{<:FloatingPoint}
>
> representing an array composed of elements which are subtypes of 
> FloatingPoint and
>
> Array{FloatingPoint}
>
> representing an array composed of elements of the exact same type which is 
> a subtype of FloatingPoint?
>
> Before implementing this great idea, a "<:Type" definition should be found 
> as  JeffBezanson stressed on Github.
>
> Le mardi 27 mai 2014 09:16:02 UTC+2, Toivo Henningsson a écrit :
>>
>> Great to hear such positive response :)
>> I've created an issue for the feature request: 
>> https://github.com/JuliaLang/julia/issues/6984
>>
>> On Monday, 26 May 2014 22:25:37 UTC+2, Adam Smith wrote:
>>>
>>> +1 to Toivo's idea. I LOVE that suggestion. Combine that with this, and 
>>> function declarations can fit on one line again:
>>> typealias Float FloatingPoint
>>>
>>>
>>>
>>> On Monday, May 26, 2014 3:33:38 PM UTC-4, Toivo Henningsson wrote:
>>>>
>>>> Or you can use
>>>>
>>>>     typealias FPArray{T<:FloatingPoint} Array{T}
>>>>
>>>>     foo(a::FPArray, b::FPArray) = a+b
>>>>
>>>> to get the same effect (foo will still apply when the element types of 
>>>> a and b are different).
>>>>
>>>> Perhaps we could introduce a syntax to create such a covariant 
>>>> typealias on the fly, e.g.
>>>>
>>>>     const FPArray2 = Array{<:FloatingPoint}
>>>>
>>>> would work the same as FPArray above (though with an anonymous/hidden 
>>>> type parameter).
>>>> Then the example could be written
>>>>
>>>>     foo(a::Array{<:FloatingPoint}, b::Array{<:FloatingPoint}) = a+b
>>>>
>>>> if you don't want to define the typealias first.
>>>>
>>>> On Sunday, 25 May 2014 17:44:26 UTC+2, Pierre-Yves Gérardy wrote:
>>>>>
>>>>> On Sunday, May 25, 2014 5:10:49 PM UTC+2, James Crist wrote:
>>>>>>
>>>>>> Yeah, that's what I've been using. My issue with it is that the 
>>>>>> declarations get long for functions with more than 2 arrays. Was hoping 
>>>>>> there was a more concise way.
>>>>>>
>>>>>
>>>>> You can use  typealias Fp FloatingPoint , then
>>>>>
>>>>> function foo{T1<:Fp, T2<:Fp}(a::Array{T1}, b::Array{T2}) 
>>>>>
>>>>>

Reply via email to