Cosmetic changes...
I've removed the CMinMax type class which only had one instance - for Points - and implemented minPt and maxPt directly.
Where type signatures had Point2, Vec2 etc. I've changed instances where the type parameter was labelled _a_ to label it _u_. This should be more indicative that the type parameter represents the unit of Points, Vectors etc. usually a Double.
e.g.
frameProduct :: (Num a, InnerSpace (Vec2 a))
=> Frame2 a -> Frame2 a -> Frame2 a
Becomes:
frameProduct :: (Num u, InnerSpace (Vec2 u))
=> Frame2 u -> Frame2 u -> Frame2 u