Hello.

Let’s say I want to create a type which stores two tuples: one of them is exactly as twice as large as the other one:

```
struct MyType{D}
t1::NTuple{D, Int64}
t2::NTuple{2*D,Int64}
end
```

This code obviously is not working as there is no method `*(::Int64,::TypeVar)`

.

To overcome this I can think of something like

```
struct MyType{D1,D2}
t1::NTuple{D1,Int64}
t2::NTuple{D2,Int64}
function MyType(t1::NTuple{D1,Int64}, t2::NTuple{D2,Int64}) where {D1,D2}
d1 = length(t1)
d2 = length(t2)
assert(d2 == d1*2)
new{D1,D2}(t1,t2)
end
end
```

But is there a better way to impose algebraic constraints on type parameters?