module Types ( Point , DArcDir , DrawOp (..) , GCodeOp (..) , if' ) where -- type Command = String type Point = (Double,Double) -- A point in the plane, absolute coordinates data DArcDir = CC | CCW deriving Show -- all of them are invariant under affine transformation data DrawOp = DMoveTo Point | DLineTo Point -- End point | DBezierTo Point Point Point -- Control point1, control point2, end point deriving Show -- this is basically what GCode can do data GCodeOp = GMoveTo Point | GLineTo Point -- End point | GArcTo Point Point Bool -- Center point, end point, clockwise deriving Show -- just to make it available everywhere if' :: Bool -> t -> t -> t if' True t _ = t if' False _ f = f