until -package:numeric-prelude -package:language-bash -package:distribution-opensuse -package:LambdaHack -package:prelude-compat -package:ghc-lib-parser -package:mixed-types-num package:free -is:exact -is:exact -is:exact

Repeatedly run a computation until it produces a Just value. This can be useful when paired with a monad that has side effects. For example, we may have genId :: IO (Maybe Id) that uses a random number generator to allocate ids, but fails if it finds a collision. We can repeatedly run this with
retract (untilJust genId) :: IO Id