draw :: PrimMonad m => Canvas (PrimState m) -> Points -> Color -> StdGen -> m (Canvas (PrimState m))
draw canvas canvasPoints seedColor g = do
    let (nextColor,g') = newColor seedColor g
    points <- touchedPoints canvas canvasPoints
    V.sequence_ $ V.map (drawBorderPixels canvas nextColor g') points
    if (V.length points < (width*height)) then do (draw canvas canvasPoints nextColor g') else return canvas
draw :: PrimMonad m => Canvas (PrimState m) -> Points -> Color -> StdGen -> m (Canvas (PrimState m))
draw canvas canvasPoints seedColor g = do
    let (nextColor,g') = newColor seedColor g
    points <- touchedPoints canvas canvasPoints
    V.sequence_ $ V.map (drawBorderPixels canvas nextColor g') points
    if (V.length points < (width*height)) then do (draw canvas canvasPoints nextColor g') else return canvas
draw canvas canvasPoints seedColor g = do
    let (nextColor,g') = newColor seedColor g
    points <- touchedPoints canvas canvasPoints
    V.sequence_ $ V.map (drawBorderPixels canvas nextColor g') points
    if (V.length points < (width*height)) then do (draw canvas canvasPoints nextColor g') else return canvas