I would like to have a type such as this:
type foo{T,M,N}
x::Array{T,M}
y::Array{T,N}
end
Where T and M can be anything, but N = M + 1. I know I can't write
type foo{T,M}
x::Array{T,M}
y::Array{T,M+1}
end
So I wrote the following naive code, but I get an error:
julia> function foo{T,M,N}(x::Array{T,M}, y::Array{T,N})
@assert (M + 1) == N
return foo(x,y)
end
foo{T,M,N} (constructor with 1 method)
julia> foo(rand(3),rand(3,3))
ERROR: stack overflow
in foo at none:2
in foo at none:3 (repeats 79999 times)
I have two questions:
1. How can I correctly implement an assert on the parameters of the default
constructor?
2. Is there a more elegant way to constrain type parameters other than an
assert in the constructor?
Thanks!