Would you show a simple example of the use, and defs for tuple, ntuple
below?
On Monday, October 5, 2015 at 5:42:17 AM UTC-4, Tomas Lycken wrote:
>
> Ha! It seems all I needed was a type-assertion at the end. Both of these
> work the way I want them to:
>
> construct_instance{T<:Tuple}(::Type{T}) = tuple([construct_instance(t) for t
> in T.parameters]...)::T
> construct_instance{T<:Tuple}(::Type{T}) = ntuple(i ->
> construct_instance(T.parameters[i]), length(T.parameters))::T
>
> // T
>
> On Monday, October 5, 2015 at 11:33:25 AM UTC+2, Tomas Lycken wrote:
>
> I managed to get rid of the list comprehension by using ntuple:
>>
>> construct_instance{T<:Tuple}(::Type{T}) = ntuple(i ->
>> construct_instance(T.parameters[i]), length(T.parameters))
>>
>> However, this suffers from the same instability problem (because of the
>> anonymous function?). I’ll keep trying, but I would gladly accept any
>> advice on how to do this.
>>
>> // T
>>
>> On Monday, October 5, 2015 at 10:28:15 AM UTC+2, Tomas Lycken wrote:
>>
>> I’ve tried to do the following
>>>
>>> construct_instance{T}(::Type{T}) = T()
>>> construct_instance{T<:Tuple}(::Type{T}) = tuple([construct_instance(t) for
>>> t in T.parameters]...)
>>>
>>> as a way to dynamically and recursively create an instance of a tuple
>>> type. The tuple type might be nested, it might be any length > 0, and all
>>> (supported) non-tuple types in the hierarchy are leaf-types with an empty
>>> constructor defined.
>>>
>>> This works insofar as it gives me the tuple I want back, but it’s not
>>> type stable; the inferred return type is Tuple rather than T. I also
>>> tried wrapping it in convert(T, tuple(...)), but that only gave me e.g.
>>> Tuple{Any,
>>> Any} for a two-tuple type, which I assume is because type info is lost
>>> in the list comprehension.
>>>
>>> Is there a way to help type inference realize that it will get a T
>>> back, even when T is a tuple type?
>>>
>>> // T
>>>
>>>
>>
>>
>
>