{-# OPTIONS_HADDOCK hide #-} {-# LANGUAGE DeriveGeneric #-} module Data.Point2d where import Control.DeepSeq import Control.DeepSeq.Generics (genericRnf) import GHC.Generics import Test.QuickCheck data Point2d = Point2d Double Double deriving (Show, Eq, Ord, Generic) instance NFData Point2d where rnf = genericRnf pointAsList2d :: Point2d -> [Double] pointAsList2d (Point2d x y) = [x, y] distSqr2d :: Point2d -> Point2d -> Double distSqr2d (Point2d x1 y1) (Point2d x2 y2) = let dx = x2 - x1 dy = y2 - y1 in dx*dx + dy*dy instance Arbitrary Point2d where arbitrary = do x <- arbitrary y <- arbitrary return (Point2d x y)