<div dir="ltr"><span style="font-size:14.4px;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">> alternative does not apply function to first Nothing</span><br><div><span style="font-size:14.4px;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br></span></div><div><span style="font-size:14.4px;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><|> or other functions from Alternative may not be the entire function to solve Marc's problem.</span></div><div><span style="font-size:14.4px;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br></span></div><div><span style="font-size:14.4px;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">It is a possibly useful function that is a bit tricky to find. ;)</span></div><div><span style="font-size:14.4px;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br></span></div></div><div class="gmail_extra"><br><div class="gmail_quote">On 31 July 2018 at 11:26, Paul <span dir="ltr"><<a href="mailto:aquagnu@gmail.com" target="_blank">aquagnu@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div text="#000000" bgcolor="#FFFFFF">
    <p>But alternative does not apply function to first Nothing. `maybe`
      can exec function on Nothing or apply another one on Just.</p>
    <p>maybe (g x) id (f x) ?<br>
    </p>
    <br>
    <div class="m_3513032222926179820moz-cite-prefix">31.07.2018 11:10, Imants Cekusins
      wrotes:<br>
    </div><div><div class="h5">
    <blockquote type="cite">
      
      <div dir="ltr">Salut Marc,
        <div><br>
        </div>
        <div>Are you looking for Alternative by any chance:</div>
        <div>
          <div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><a href="http://hackage.haskell.org/package/base-4.11.1.0/docs/Control-Applicative.html#t:Alternative" target="_blank">http://hackage.haskell.org/<wbr>package/base-4.11.1.0/docs/<wbr>Control-Applicative.html#t:<wbr>Alternative</a><br>
          </div>
          <br class="m_3513032222926179820gmail-Apple-interchange-newline">
          <br>
        </div>
        <div>
          <div>Prelude> :m Control.Applicative</div>
          <div>Prelude Control.Applicative> Just 1 <|> Just
            2::Maybe Int</div>
          <div>Just 1</div>
          <div>Prelude Control.Applicative> Nothing <|> Just
            2::Maybe Int</div>
          <div>Just 2</div>
          <div><br>
          </div>
          <div><br>
          </div>
          <div><br>
          </div>
        </div>
      </div>
      <div class="gmail_extra"><br>
        <div class="gmail_quote">On 31 July 2018 at 10:47, Marc Busqué <span dir="ltr"><<a href="mailto:marc@lamarciana.com" target="_blank">marc@lamarciana.com</a>></span>
          wrote:<br>
          <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" target="_blank">http://hackage.haskell.o<wbr>rg/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" target="_blank">http://waiting-for-dev.github.<wbr>io/about/</a><br>
            <br>
            On Tue, 31 Jul 2018, Paul wrote:<br>
            <br>
            <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <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" target="_blank">http://waiting-for-dev.github.<wbr>io/about/</a><br>
              <br>
              <br>
              ______________________________<wbr>_________________<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" target="_blank">http://mail.haskell.org/cgi-bi<wbr>n/mailman/listinfo/haskell-caf<wbr>e</a><br>
              Only members subscribed via the mailman list are allowed
              to post.<br>
              <br>
              <br>
              <br>
            </blockquote>
            <br>
            ______________________________<wbr>_________________<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" target="_blank">http://mail.haskell.org/cgi-bi<wbr>n/mailman/listinfo/haskell-caf<wbr>e</a><br>
            Only members subscribed via the mailman list are allowed to
            post.<br>
          </blockquote>
        </div>
        <br>
      </div>
    </blockquote>
    <br>
  </div></div></div>

</blockquote></div><br></div>