You could consider the 'linear' package [1]. Any type that is an instance of the Linear.V2.R2 class could be considered to be a point on a 2D plane.
Adding and subtracting vectors can be achieved using the Linear.Vector.Additive class.
Linear.Metric.Metric has dot product and length of vectors.
The Linear.Matrix module can be used for transformations. Combining transformations is just matrix multiplication.
I'm quite happy with the 'linear' package as a whole, but it could use more documentation showing simple operations. Its abstact nature can be a bit daunting.