///|
/// 2D point with floating point coordinates
pub struct Point {
  x : Double
  y : Double
} derive(Eq, Debug)

///|
pub extend Point with Debug::{to_repr}

///|
pub extend Point with Eq::{not_equal, equal}

///|
/// Create a new point
pub fn Point::new(x~ : Double, y~ : Double) -> Point {
  { x, y, }
}

///|
/// 2D vector (same as Point but semantically different)
pub struct Vec2 {
  x : Double
  y : Double
} derive(Eq, Debug)

///|
pub extend Vec2 with Debug::{to_repr}

///|
pub extend Vec2 with Eq::{not_equal, equal}

///|
pub fn Vec2::new(x~ : Double, y~ : Double) -> Vec2 {
  { x, y, }
}