untouchedPoint :: PrimMonad m => Canvas (PrimState m) -> P2 -> m Bool
untouchedPoint canvas point = do
    (_,_,touched) <- UM.read canvas (index point)
    if touched then return False else return True
untouchedPoint :: PrimMonad m => Canvas (PrimState m) -> P2 -> m Bool
untouchedPoint canvas point = do
    (_,_,touched) <- UM.read canvas (index point)
    if touched then return False else return True
untouchedPoint canvas point = do
    (_,_,touched) <- UM.read canvas (index point)
    if touched then return False else return True