, , sequenceA [(+1)] BOTH (+1) const [], . , pure [] = const [].
sequenceA [(+1)] = (:) <$> (+1) <*> const []
lambdas ( , ):
sequenceA [(+1)] = \b c -> ( (:) b c ) <$> ( \a -> (+1) a ) <*> ( \a -> const [] a )
(<$>) (<*>) infixl 4. , , .. (<$>).
(<$>) :: Functor f => (a -> b) -> f a -> f b.
<$> , (+1) ((->) r), OR \a -> - \b c -> ( (:) b c ), b, ( \a, ):
sequenceA [(+1)] = \a c -> ( (:) ((+1) a) c ) <*> ( \a -> const [] a )
, (:) c, (+1) a. .
, : (<*>) :: f (a -> b) -> f a -> f b. f - \a ->.
, \a ->. a , , a , - . . a, , , . \a -> ( <*>), :
( \c -> ( (:) ((+1) a) c ) ) (const [] a)
= ( (:) ((+1) a) (const [] a) ) -- Ignore those a's, they're placeholders.
, <*>, - \a ->:
sequenceA [(+1)] = \a -> ( (:) ((+1) a) (const [] a) )
Sugaring :
sequenceA [(+1)] = \a -> (+1) a : const [] a
Cm! It makes sense that the argument sequenceA [(+1)]for both to (+1)and for const. For example, application 2 gives:
sequenceA [(+1)] 2 = (+1) 2 : const [] 2
Remember that const a b :: a -> b -> aand therefore simply ignores it:
sequenceA [(+1)] 2 = 3 : []
OR, more sweetly:
sequenceA [(+1)] 2 = [3]