I want to define a data type `Polar` to perform calculations using polar coordinates:

```
data Polar = Polar { distance :: Double, angle :: Double }

```

and have functions like `rotate`, `sum` and so on.

Then, I would like to have a "synonym class" (or just alias) like
`TwsTwa` (true wind speed and true wind angle) like 

```
data TwsTwa = TwsTwa { tws :: Double, twa :: Double }

```

without having to redefine the functions.

Is the following, using a class, the best solution for that?
Is it the shorter one? Please note I'm referring to the way `TwsTwa` is defined, not to how difficult is to write the general code for `Polar`.
What alternatives are there?

```
-- .................................................
-- .................................................
class PolarFamily tPolar where
  distanceP :: tPolar -> Double
  angleP :: tPolar -> Double
  toMe :: Polar -> tPolar

  rotate :: tPolar -> Double -> tPolar
  rotate pol ang =
     toMe $ Polar {distance=distanceP pol, angle=(angleP pol) + ang}

  sumP :: tPolar -> tPolar -> tPolar
  sumP p1 p2 =
     toMe $ Polar {distance=(distanceP p1)+(distanceP p2), 
            angle=(angleP p1)+(angleP p2) } -- caution: wrong calculation

-- .................................................
-- .................................................
data Polar = Polar { distance :: Double, angle :: Double }

instance PolarFamily Polar where
  distanceP = distance
  angleP = angle
  toMe p = p

```

TwsTwa is defined then like this:

```
-- .................................................
-- .................................................
data TwsTwa = TwsTwa { tws :: Double, twa :: Double }

instance PolarFamily TwsTwa where
  distanceP = tws
  angleP = twa
  toMe Polar{ distance=d, angle=a} = TwsTwa {tws=d, twa=a}

```