That's a nice solution -- thanks!
On Thursday, June 2, 2016 at 1:54:23 PM UTC+2, Erik Schnetter wrote: > > In these cases I do the following: > > (1) Add additional type parameters, as in > > ```Julia > type FooImp{D,D1} > baz::Array{D} > bar::Array{D1} > end > ``` > > (2) Add a function that calculates the type: > > ```Julia > Foo(D) = FooImpl{D,D+1} > ``` > > In many cases I can then have to write `Foo(D)` instead of `Foo{D}` (round > parentheses instead of curly braces), but apart from this, things work out > nicely. I'm sure there is some `@pure` annotation or similar for `Foo` to > help type inference. > > -erik > > PS: Yes, it would be nice if this calculation (`D1 = D+1`) could be moved > elsewhere, e.g. into the type definition. I don't see why this isn't > possible, I think it's mostly a complicated thing to implement, and people > haven't demonstrated the necessity for this yet. > > > > On Thu, Jun 2, 2016 at 2:07 AM, Robert DJ <math....@gmail.com > <javascript:>> wrote: > >> The problem with not specifying D is type inference. I actually have more >> entries in Foo and would like >> >> type Foo{D} >> baz::Array{D} >> bar::Array{D+1} >> end >> >> >> I want to use Foo in calculations and for D = 1 I am doing something like >> >> baz + bar[:,1] >> baz + bar[:,2] >> >> >> For D = 2: >> >> baz + bar[:,:,1] >> baz + bar[:,:,2] >> >> >> I *could* instead (for D = 2) move the third dimension to extra columns... >> >> >> On Wednesday, June 1, 2016 at 8:56:28 PM UTC+2, Robert DJ wrote: >>> >>> I have a custom type with a TypePar denoting a dimension and would like >>> to define the following: >>> >>> type Foo{D} >>> bar::Array{D+1} >>> end >>> >>> However, this does not work. As D is only 1 or 2 it would OK with >>> >>> type Foo{1} >>> bar::Matrix >>> end >>> >>> type Foo{2} >>> bar::Array{3} >>> end >>> >>> but unfortunately this isn't working, either. >>> >>> Can this problem be solved? >>> >>> Thanks! >>> >> > > > -- > Erik Schnetter <schn...@gmail.com <javascript:>> > http://www.perimeterinstitute.ca/personal/eschnetter/ >