I am wondering if it would make sense to have an abstract type for <: AbstractMatrix types which are by construction square, eg
abstract type SquareMatrix{T} <: AbstractMatrix{T} end
Subtypes would be Diagonal, various *Triangular, Symmetric and Hermitian, etc.
Not being a subtype would of course not imply that something is not square, just that it cannot be determined from the type alone.
(opening discussion before making an issue)