<div dir="auto"><div>I think you're probably after something like</div><div dir="auto"><br></div><div dir="auto">boo :: Maybe a -> Maybe b -> Maybe (Either a b)</div><div dir="auto">boo ma mb = (Left <$> ma) <|> (Right <$> mb)<br><br><div class="gmail_quote" dir="auto"><div dir="ltr">On Tue, Jul 31, 2018, 3:47 AM Marc Busqué <<a href="mailto:marc@lamarciana.com">marc@lamarciana.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Apologies, I clearly asked the question in a rushed way...<br>
<br>
I'm working with [req](<a href="http://hackage.haskell.org/package/req" rel="noreferrer noreferrer" target="_blank">http://hackage.haskell.org/package/req</a>) package.<br>
I need to parse a url from a string, but I don't know whether its schema<br>
will be `http` or `https`. However, `req` just provides me with two<br>
functions:<br>
<br>
```<br>
parseUrlHttp :: ByteString -> Maybe (Url Http, Option scheme)<br>
parseUrlHttps :: ByteString -> Maybe (Url Https, Option scheme)<br>
```<br>
<br>
As I don't know the schema beforehand, I have to apply one of the two<br>
functions, do a case analysis on its result and, depending on the<br>
result, call the second one or return the first result.<br>
<br>
What I think is a common case here (perhaps I'm wrong) is the need to<br>
choose between two or more `Maybe` values where at most one of them will<br>
be a `Just`. `maybe` does not do that. `catMaybes` could be used for<br>
that when all the `Maybe` have the same inner type, but it is not the<br>
exact abstraction and it would need more code (just like simply doing a<br>
case analysis).<br>
<br>
Thanks and, again, sorry for the hurried question before (I don't like<br>
when I see it from others :()<br>
<br>
Marc Busqué<br>
<a href="http://waiting-for-dev.github.io/about/" rel="noreferrer noreferrer" target="_blank">http://waiting-for-dev.github.io/about/</a><br>
<br>
On Tue, 31 Jul 2018, Paul wrote:<br>
<br>
> <br>
> Something like "maybe" function?<br>
> <br>
> <br>
> 31.07.2018 10:07, Marc Busqué wrotes:<br>
>       Hi!<br>
><br>
>       I have two functions:<br>
><br>
>       ```<br>
>       foo :: a -> Maybe b<br>
>       bar :: a -> Maybe c<br>
>       ```<br>
><br>
>       From which I want to build a higher order function:<br>
><br>
>       ```<br>
>       foobar :: a -> (a -> Maybe b) -> (a -> Maybe c) -> Either b c<br>
>       ```<br>
><br>
>       The implementation I need is:<br>
><br>
>       ```<br>
>       foobar x f g =<br>
>         case (f x) of<br>
>           Nothing -> g x<br>
>           Just y  -> Just y<br>
>       ```<br>
><br>
>       I'm a bit surprised that looking at hoogle I don't find a built-in<br>
>       solution for this quite common need for `Maybe` types (or perhaps for<br>
>       any monad).<br>
><br>
>       Am I looking in the wrong way? Does it exist a similar abstraction but<br>
>       with a different shape?<br>
><br>
>       Thanks in advance,<br>
><br>
>       Marc Busqué<br>
>       <a href="http://waiting-for-dev.github.io/about/" rel="noreferrer noreferrer" target="_blank">http://waiting-for-dev.github.io/about/</a><br>
> <br>
> <br>
> _______________________________________________<br>
> Haskell-Cafe mailing list<br>
> To (un)subscribe, modify options or view archives go to:<br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
> Only members subscribed via the mailman list are allowed to post.<br>
> <br>
> <br>
> <br>
>_______________________________________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
Only members subscribed via the mailman list are allowed to post.</blockquote></div></div></div>