You can write instance Num Vector to overload + to add vectors (and other operators that make sense).
instance Num Vector where (Vector x1 y1) + (Vector x2 y2) = Vector (x1 + x2) (y1 + y2) -- and so on
However, note that + is of type Num a => a -> a -> a , i.e. both operands and the result must all be of the same type. This means that you cannot have a Dot plus a Vector be Dot .
While you can hide Num from Prelude and specify your own + , this is likely to cause confusion and make it harder to use your code along with regular arithmetic.
I suggest you define your own operator to add a vector point, e.g.
(Dot xy) `offsetBy` (Vector dx dy) = Dot (x + dx) (y + dy)
or some option using characters if you prefer something shorter.
source share