[Haskell-cafe] Missing common function for Maybe types

Nigel Rantor wiggly at wiggly.org
Tue Jul 31 12:07:21 UTC 2018


Your `foobar` function cannot work, it doesn't handle the case when the 
URL is neither http nor https.

I would use catMaybes and headMay to work this out...untested code, and 
you'll need the `safe` library for headMay too...

parse :: ByteString -> Maybe (Url Http, Option scheme)
parse input = headMay $ catMaybes $ fmap input [parseUrlHttp, parseUrlHttps]

And everything is lazy so if the input gets parsed correctly by the 
first call you never actually perform the second one....

   n

On 31/07/18 08:07, Marc Busqué wrote:
> Hi!
> 
> I have two functions:
> 
> ```
> foo :: a -> Maybe b
> bar :: a -> Maybe c
> ```
> 
>  From which I want to build a higher order function:
> 
> ```
> foobar :: a -> (a -> Maybe b) -> (a -> Maybe c) -> Either b c
> ```
> 
> The implementation I need is:
> 
> ```
> foobar x f g =
>    case (f x) of
>      Nothing -> g x
>      Just y  -> Just y
> ```
> 
> I'm a bit surprised that looking at hoogle I don't find a built-in
> solution for this quite common need for `Maybe` types (or perhaps for
> any monad).
> 
> Am I looking in the wrong way? Does it exist a similar abstraction but
> with a different shape?
> 
> Thanks in advance,
> 
> Marc Busqué
> http://waiting-for-dev.github.io/about/
> 
> 
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.
> 



More information about the Haskell-Cafe mailing list