I am a beginner with haskell and am reading the Learn you a haskell book. I have been trying to digest functors and applicative functors for a while now.
In the applicative functors topic, the instance implementation for Maybe
is given as
instance Applicative Maybe where
pure = Just
Nothing <*> _ = Nothing
(Just f) <*> something = fmap f something
So, as I understand it, we get Nothing
if the left side functor (for <*>
) is Nothing. To me, it seems to make more sense as
Nothing <*> something = something
So that this applicative functor has no effect. What is the usecase, if any for giving out Nothing
?
Say, I have a Maybe String
with me, whose value I don't know. I have to give this Maybe
to a third party function, but want its result to go through a few Maybe (a -> b)
's first. If some of these functions are Nothing
I'll want them to silently return their input, not give out a Nothing
, which is loss of data.
So, what is the thinking behind returning Nothing
in the above instance?
<|>
(which is also inControl.Applicative
) – Jeremy List