singleton :: UF -> Int -> UF
singleton uf x = UF ps' $ IM.insert x p (im uf)
  where (ps',p) = fresh (ps uf) x
singleton :: UF -> Int -> UF
singleton uf x = UF ps' $ IM.insert x p (im uf)
  where (ps',p) = fresh (ps uf) x
singleton uf x = UF ps' $ IM.insert x p (im uf)
  where (ps',p) = fresh (ps uf) x