module NumericPrelude.Monad where {- | repeat action until result fulfills condition -} {-# INLINE untilM #-} untilM :: (Monad m) => (a -> Bool) -> m a -> m a untilM p m = do x <- m if p x then return x else untilM p m