[Haskell-cafe] generating Maybe
Henning Thielemann
lemming at henning-thielemann.de
Thu Nov 8 02:31:34 EST 2007
On Thu, 8 Nov 2007, Stuart Cook wrote:
> On 11/8/07, Tim Newsham <newsham at lava.net> 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
My 'toMaybe' is a specialisation of '\b x -> guard b >> return x'. This
let us return to the discussion, whether there should be a specialised
function, if there is a general function which does the same.
http://www.haskell.org/haskellwiki/Simple_to_complex#Type_class_methods
I use 'toMaybe' a lot, because it allows partial application and I have
seen library code, where 'toMaybe' could have been used, but its author
didn't seem to know or like 'guard b >> return x'.
More information about the Haskell-Cafe
mailing list