Somewhat academical questions: Would it be possible to generalise
firstparam and secondparam to any type and number of parameters?
Something like

  param(SomeType, n) # -> returns nth parameter

To generalise to any type, I think something like this would be needed:

  firstparam{T,A}(::Type{T{A}}) = A

which doesn't exist (yet).  Then, to generalise to any number of
parameters, would there be a better way than:

   function param{T}(::Type{T}, i)
      if i==1
          return firstparam(T)
      elseif i==2
          return secondparam(T)
      else
          error("not implemented")
      end
  end

?

Presumably for now we'd be stuck with:

  param{T}(::Type{T}, i) =  T.parameters[i]


On Sat, 2015-09-12 at 12:43, Tim Holy <tim.h...@gmail.com> wrote:
> All I mean is that if you write functions that call `firstparam` or 
> `secondparam`, julia will be able to infer the return type. That means that in
>
> function foo(mt::MyType)
>     T = firstparam(typeof(mt))
>     a = Array(T,20)
>     # now do something with a
> end
>
> julia will generate efficient code in manipulating a. With the version that 
> uses 
> the parameters field directly, it won't.
>
> In addition to the two methods I showed in the last email, you should also 
> define
>
> firstparam(mt::MyType) = firstparam(typeof(mt))
> secondparam(mt::MyType) = secondparam(typeof(mt))
>
> and that will make the code above a little nicer.
>
> Best,
> --Tim
>
> On Saturday, September 12, 2015 03:27:20 AM Jeffrey Sarnoff wrote:
>> pls show me a quick example of using that inferrably
>> 
>> On Saturday, September 12, 2015 at 6:12:21 AM UTC-4, Tim Holy wrote:
>> > A much better way (because it's inferrable):
>> > 
>> > firstparam{A,B}(::Type{MyType{A,B}}) = A
>> > secondparam{A,B}(::Type{MyType{A,B}}) = B
>> > 
>> > --Tim
>> > 
>> > On Friday, September 11, 2015 06:40:59 PM Jeffrey Sarnoff wrote:
>> > > julia> type MyType{A,B} end
>> > > 
>> > > julia> ((MyType.parameters)...)
>> > > (A,B)
>> > > 
>> > > On Friday, September 11, 2015 at 3:20:17 PM UTC-4, Erik Schnetter wrote:
>> > > > Is there a function in Julia that allows accessing the parameters of a
>> > > > type?
>> > > > 
>> > > > For example, if I have
>> > > > 
>> > > >    type T{A,B} end
>> > > > 
>> > > > then I'd like a way to convert `T{Int, Char}` to `(Int, Char)`.
>> > > > 
>> > > > In other words, is there a way to get at the contents of `DataType`
>> > > > objects?
>> > > > 
>> > > > Thanks,
>> > > > -erik

Reply via email to