<div dir="ltr"><div>Another perfectly cromulent definition is:</div><div><br></div><div>untilNothing f = fromJust . last . takeWhile isJust . iterate (f =<<) . Just</div><div><br></div><div>This has 2 advantages:</div><div><br></div><div>1. It illustrates the haskellism that "A list is a loop is a list."</div><div><br></div><div>2. It composes much-beloved list combinators into a reasonable pipeline.</div><div><br></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature">-- Kim-Ee</div></div>
<br><div class="gmail_quote">On Fri, Jul 21, 2017 at 12:26 AM, Jake <span dir="ltr"><<a href="mailto:jake.waksbaum@gmail.com" target="_blank">jake.waksbaum@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">I have a function f :: a -> Maybe a that I want to feed into itself with some initial input until it returns Nothing.<div><div><br><div>untilNothing :: (a -> Maybe a) -> a -> a<br></div><div>untilNothing f x = case f x of</div></div></div><div>                            Just x' -> untilNothing f x'</div><div>                            Nothing -> x</div><div><br></div><div>Is 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?</div></div>
<br>______________________________<wbr>_________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/haskell-<wbr>cafe</a><br>
Only members subscribed via the mailman list are allowed to post.<br></blockquote></div><br></div></div>