Could someone explain 'applicative'? To me it seems like throwing some magic syntax at a simple usecase to make it more terse and less readable - but maybe I misunderstand and it's something every Haskell programmer knows.
() is infix "fmap"
() is infix "ap"
The "fmap" function lets you apply something of the form (a -> b) to a value of the form (m a), to get something of the form (m b). Specialized to lists, it's the familiar "map" function, but there are a lot of other things it can apply to.The "ap" function lets you apply a "wrapped" function to a "wrapped" value - "apply this list of functions to that list of values".
The way these combine, along with currying, means you get a well known pattern for applying a many argument function to many wrapped values:
before the first argument
before every remaining argument
It works out like this: let add3 :: Integer -> Integer -> Integer -> Integer
add3 x y z = x + y + z
(add3 5) :: Integer -> Integer -> Integer
(add3 Just 5) :: Maybe (Integer -> Integer -> Integer)
(add3 Just 5 Just 3) :: Maybe (Integer -> Integer)
(add3 Just 5 Just 3 Just 9) :: Maybe Integer