class Move a where move :: Point -> a -> a instance Move a => Move (Maybe a) instance Move Point instance Move Rect instance Move Line instance Move DrawCommand fmove :: (Functor f, Move b) => Point -> f b -> f b