type ExtendedPointWRT[PointRep] =
PointWRT[PointRep] &
{add: (PointRep x PointRep) PointRep}
value ExtendedPoint =
exists PointRep. ExtendedPointWRT[PointRep]
value extendPointPackage =
fun(pointPackage: Point)
open pointPackage as p[PointRep] in
pack[PointRep' = PointRep
in ExtendedPointWRT[PointRep']]
p &
{add = fun(a: PointRep, b: PointRep)
p.mkpoint(p.x-coord(a)+p.x-coord(b),
p.y-coord(a)+p.x-coord(b))}
value extendedCartesianPointPackage =
extendPointPackage(cartesianPointPackage)