That's what I was thinking, but I couldn't figure out if I wanted MonadPlus, Alternative or maybe Monoid because they all have zero elements.
Could MonadPlus (with mzero) or Alternative (with empty) provide the termination condition, if this pattern turned out to be more generally useful?Joshua GrossoOn Thu, Jul 20, 2017 at 7:16 PM, Jeff Clites <jclites@mac.com> wrote:Also this pattern does seem Maybe-specific, in that for the general Monad case there's not an obvious termination condition.JEffThis is about as good as you can do. The monad-loops package provides a variety of similar combinators, generally implemented in similar ways, but not this specific combinator. The downside of this combinator is that it is partial: it will run forever without producing anything if f never gives a Nothing.On Thu, Jul 20, 2017 at 10:27 AM Jake <jake.waksbaum@gmail.com> wrote:I have a function f :: a -> Maybe a that I want to feed into itself with some initial input until it returns Nothing._______________________________________________untilNothing :: (a -> Maybe a) -> a -> auntilNothing f x = case f x ofJust x' -> untilNothing f x'Nothing -> xIs there a better way to do this? I feel like there is something more general going on with Monads being fed into themselves, but maybe I'm wrong. Thoughts?
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post._______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post.
_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post.