
On 11/8/07, Tim Newsham
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