BlockMatrix only needs one type parameter to fully specify the type, so you should probably only use one type parameter. Like so:
*type BlockMatrix{S} <: AbstractMatrix{S}*
>
> * A::AbstractMatrix{S}*
>
> * B::AbstractMatrix{S}*
>
> * C::AbstractMatrix{S}*
>
> * D::AbstractMatrix{S}*
>
> *end*
>
>
I'm sure someone else can explain in more detail why yours didn't work.
