This looks good on the type front.

And here it's OK to have just a self multiply rather than a square() because it's only going to be called for arithmetic types x.