IdempotSP

module IdempotSP where
import Spops(getSP,putSP)
import SP(SP)

idempotSP :: Eq a => SP a a
idempotSP =
    getSP $ \ x ->
    putSP x $
    idempotSP' x
  where
    idempotSP' x =
      getSP $ \ x' ->
      (if x'==x
       then id
       else putSP x') $
      idempotSP' x'