Currently, `GHC.Conc` has alwaysSucceeds :: STM a -> STM () alwaysSucceeds i = do ( i >> retry ) `orElse` ( return () ) checkInv i If I understand what's going on here (which I may not), I think this should be equivalent to alwaysSucceeds i = (i >> retry) `orElse` checkInv i David Feuer