I see here
-- Note that "forever" isn't necessarily non-terminating.
-- If the action is in a @'MonadPlus'@ and short-circuits after some number of iterations.
-- then @'forever'@ actually returns `mzero`, effectively short-circuiting its caller.
To be honest I don't understand this note. Do they mean that it is possible to break forever with MonadPlus, for instance - IO Bool? Let's say, IO False will break it...
From one point of view IO is MonadPlus too. Maybe I must wrap my IO Bool in something else to achieve the possibility to break forever with IO Bool and MonadPlus? What does the note mean at all?
Sure, I can break it with exception or to implement own forever but my interest is about this strange note.