On 11/8/07, Tim Newsham <[EMAIL PROTECTED]> wrote: > Data.Maybe has functions for processing Maybe's but nothing useful > for creating maybe. I think the following would be a very useful > addition, a guarded function: > > guarded :: (a -> Bool) -> (a -> b) -> a -> Maybe b > guarded p f x | p x = Just (f x) > | otherwise = Nothing > > such a function in the std libs would make functions like "unfoldr" > more attractive -- uses of foldr nearly always encapsulate this > notion.
How about this variant: ensure :: (MonadPlus m) => (a -> Bool) -> a -> m a ensure p x | p x = return x | otherwise = mzero Which as Jonathan points out, could also be written: ensure p x = guard (p x) >> return x Now we can define guarded p f x = ensure p x >>> fmap f Stuart _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe