> immutable Foo{T,M,N} # probably want an immutable here, so nobody swaps
>                      # out the arrays behind your back.
>     x::Array{T,M} 
>     y::Array{T,N}
>     function Foo(x,y)
>         @assert (M + 1) == N
>         new(x,y)
>     end
> end
> Foo{T, M, N}(x::Array{T,M}, y::Array{T,N}) = Foo{T, M, N}(x,y)
> Foo(rand(3),rand(3,2))
> Foo(rand(3),rand(3,2,3)) # errors

Also, the way outer and inner constructors of parameterized types are
done is confusing many, including myself.  Search the mailing list...

Basically read the outer constructor

Foo{T, M, N}(x::Array{T,M}, y::Array{T,N}) = Foo{T, M, N}(x,y)

as: define a parameterized function Foo which calls a type constructor
of the concrete type Foo{T,M,N}.  The confusing thing is that both the
function parameters and type parameters are the same and the function
name and type name are the same.  Which, of course, leads to brain-aches.

Reply via email to