On Mon, Jul 6, 2009 at 8:49 PM, Dan Doel<dan.d...@gmail.com> wrote: > > I've often noticed the need for a similar function in conjunction with > unfoldr: > > -- This is overly general for unfoldr, but it lines up with check > stopAt :: (MonadPlus m) => (a -> Bool) -> (a -> b) -> a -> m b > stopAt p f x > | p x = mzero > | otherwise = return (f x) > > -- stopAt p f x = guard (not $ p x) >> return (f x) > -- stopAt p f = liftM2 (>>) (guard . not . p) (return . f) > -- etc. > > Then you can write: > > unfoldr (stopAt p $ f) >
I have the following function sitting around: unfoldUntil :: (b -> Bool) -> (b -> (a, b)) -> b -> [a] unfoldUntil p f n = unfoldr g n where g m | p m = Nothing | otherwise = Just $ f m But I don't remeber where I picked it up from. It looks like it fills a similar niche. Antoine _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe