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