A type for points (as distinct from vectors), with an appropriate AffineSpace instance.
Point is a newtype wrapper around vectors used to represent
points, so we don't get them mixed up. The distinction between
vectors and points is important: translations affect points, but
leave vectors unchanged. Points are instances of the
AffineSpace class from Data.AffineSpace.