
alternative does not apply function to first Nothing
<|> or other functions from Alternative may not be the entire function to
solve Marc's problem.
It is a possibly useful function that is a bit tricky to find. ;)
On 31 July 2018 at 11:26, Paul
But alternative does not apply function to first Nothing. `maybe` can exec function on Nothing or apply another one on Just.
maybe (g x) id (f x) ?
31.07.2018 11:10, Imants Cekusins wrotes:
Salut Marc,
Are you looking for Alternative by any chance: http://hackage.haskell.org/package/base-4.11.1.0/docs/ Control-Applicative.html#t:Alternative
Prelude> :m Control.Applicative Prelude Control.Applicative> Just 1 <|> Just 2::Maybe Int Just 1 Prelude Control.Applicative> Nothing <|> Just 2::Maybe Int Just 2
On 31 July 2018 at 10:47, Marc Busqué
wrote: Apologies, I clearly asked the question in a rushed way...
I'm working with [req](http://hackage.haskell.org/package/req) package. I need to parse a url from a string, but I don't know whether its schema will be `http` or `https`. However, `req` just provides me with two functions:
``` parseUrlHttp :: ByteString -> Maybe (Url Http, Option scheme) parseUrlHttps :: ByteString -> Maybe (Url Https, Option scheme) ```
As I don't know the schema beforehand, I have to apply one of the two functions, do a case analysis on its result and, depending on the result, call the second one or return the first result.
What I think is a common case here (perhaps I'm wrong) is the need to choose between two or more `Maybe` values where at most one of them will be a `Just`. `maybe` does not do that. `catMaybes` could be used for that when all the `Maybe` have the same inner type, but it is not the exact abstraction and it would need more code (just like simply doing a case analysis).
Thanks and, again, sorry for the hurried question before (I don't like when I see it from others :()
Marc Busqué http://waiting-for-dev.github.io/about/
On Tue, 31 Jul 2018, Paul wrote:
Something like "maybe" function?
31.07.2018 10:07, Marc Busqué wrotes: 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.
_______________________________________________ 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.