[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