pointsToDraw :: PrimMonad m => Canvas (PrimState m) -> P2 -> StdGen -> m [P2]
pointsToDraw canvas (x,y) g = do
    let validPoints = filter validPoint points
    availablePoints <- untouchedPoints canvas validPoints
    let shuffledPoints = shuffle availablePoints g
        takenPoints = take 1 shuffledPoints
    return takenPoints
    where n  = (x,y-1)
          ne = (x+1,y-1)
          e  = (x+1,y)
          se = (x+1,y+1)
          s  = (x,y+1)
          sw = (x-1,y+1)
          w  = (x-1,y)
          nw = (x-1,y-1)
          points = [n,ne,e,se,s,sw,w,nw]
pointsToDraw :: PrimMonad m => Canvas (PrimState m) -> P2 -> StdGen -> m [P2]
pointsToDraw canvas (x,y) g = do
    let validPoints = filter validPoint points
    availablePoints <- untouchedPoints canvas validPoints
    let shuffledPoints = shuffle availablePoints g
        takenPoints = take 1 shuffledPoints
    return takenPoints
    where n  = (x,y-1)
          ne = (x+1,y-1)
          e  = (x+1,y)
          se = (x+1,y+1)
          s  = (x,y+1)
          sw = (x-1,y+1)
          w  = (x-1,y)
          nw = (x-1,y-1)
          points = [n,ne,e,se,s,sw,w,nw]
pointsToDraw canvas (x,y) g = do
    let validPoints = filter validPoint points
    availablePoints <- untouchedPoints canvas validPoints
    let shuffledPoints = shuffle availablePoints g
        takenPoints = take 1 shuffledPoints
    return takenPoints
    where n  = (x,y-1)
          ne = (x+1,y-1)
          e  = (x+1,y)
          se = (x+1,y+1)
          s  = (x,y+1)
          sw = (x-1,y+1)
          w  = (x-1,y)
          nw = (x-1,y-1)
          points = [n,ne,e,se,s,sw,w,nw]