Methods
(static) ap(f, a) → {Object}
Apply a function within an applicative context to an applicative functor.
Haskell> (<*>) :: f (a -> b) -> f a -> f b
Parameters:
| Name | Type | Description | 
|---|---|---|
f | 
            
            function | A function lifted into an applicative context  | 
        
a | 
            
            Object | An applicative functor  | 
        
- Source:
 
Returns:
A new applicative functor of the same type, the result of the application
- Type
 - Object
 
Example
const lst = list(1,2,3);
const p = pure(lst, id);     // lift id function into applicative context
ap(p, lst);                  // => [1:2:3:[]] // proves identity
const f = x => x * 10;
const g = x => x * 3;
const pf = pure(lst, f);
const pg = pure(lst, g);
const p$ = pure(lst, $);
ap(ap(ap(p$)(pf))(pg))(lst); // => [30:60:90:[]] // not pretty
ap(ap(ap(p$, pf), pg), lst); // => [30:60:90:[]] // but
ap(pf, ap(pg, lst));         // => [30:60:90:[]] // proves composition
ap(pf, pure(lst, 10));       // => [100:[]]
pure(lst, f(10));            // => [100:[]] // proves homomorphism
ap(pf, pure(lst, 3));        // => [30:[]]
const a = pure(lst, 3) ;
ap(pf, a);                   // => [30:[]] // proves interchange (not actually possible?)
        
            
    
    (static) apFlip(f, a, b) → {Object}
A variant of ap with the arguments reversed.
Haskell> (<**>) :: Applicative f => f a -> f (a -> b) -> f b
Parameters:
| Name | Type | Description | 
|---|---|---|
f | 
            
            function | A function lifted into an applicative context  | 
        
a | 
            
            Object | The first argument to f  | 
        
b | 
            
            Object | The second argument to f  | 
        
- Source:
 
Returns:
A new applicative functor of the same type, the result of the application
- Type
 - Object
 
Example
const lst1 = list(1,2,3);
const lst2 = list(10,10,10);
const f1 = (x, y) => x * y;
const f2 = (x, y) => x + y;
const f3 = (x, y) => x - y;
apFlip(f1, lst1, lst2);      // => [10:10:10:20:20:20:30:30:30:[]]
apFlip(f2, lst1, lst2);      // => [11:11:11:12:12:12:13:13:13:[]]
apFlip(f3, lst1, lst2);      // => [9:9:9:8:8:8:7:7:7:[]]
        
            
    
    (static) Applicative() → {boolean}
Applicative functors are functors that support function application within their contexts. They
must define pure and ap methods and also be instances of Functor.
Parameters:
| Type | Description | 
|---|---|
| * | Any object  | 
        
- Source:
 
Returns:
true if an object is an instance of Applicative and false otherwise
- Type
 - boolean
 
(static) liftA(f, a) → {Object}
Lift a function into an applicative context.
Haskell> liftA :: Applicative f => (a -> b) -> f a -> f b
Parameters:
| Name | Type | Description | 
|---|---|---|
f | 
            
            function | The function to lift into an applicative context  | 
        
a | 
            
            Object | An applicative functor, the context to lift the function into  | 
        
- Source:
 
Returns:
The result of applying the lifted function
- Type
 - Object
 
Example
const lst = list(1,2,3);
const mb = just(1);
const f = x => x * 10;
liftA(f, lst);           // => [10:20:30:[]]
liftA(f, mb);            // => Just 10
        
            
    
    (static) liftA2(f, a, b) → {Object}
Lift a binary function to actions.
Haskell> liftA2 :: Applicative f => (a -> b -> c) -> f a -> f b -> f c
Parameters:
| Name | Type | Description | 
|---|---|---|
f | 
            
            function | The function to lift into an applicative context  | 
        
a | 
            
            Object | An applicative functor, the first argument to f  | 
        
b | 
            
            Object | An applicative functor, the second argument to f  | 
        
- Source:
 
Returns:
The result of applying the lifted function
- Type
 - Object
 
Example
const mb1 = just(1);
const mb2 = just(10);
const lst1 = list(1,2,3);
const lst2 = list(10,10,10);
const f = (x, y) => {
  const k1_ = (x, y) => x * y;
  return partial(k1_, x, y);
 }
liftA2(f, mb1, mb2);           // => Just 10
liftA2(f, lst1, lst2);         // => [10:10:10:20:20:20:30:30:30:[]]
        
            
    
    (static) pure(f, a) → {Object}
Lift a value into an applicative context.
Haskell> pure :: a -> f a
Parameters:
| Name | Type | Description | 
|---|---|---|
f | 
            
            Object | An applicative functor  | 
        
a | 
            
            * | Any object  | 
        
- Source:
 
Returns:
An applicative functor with the value injected
- Type
 - Object
 
Example
const lst = list(1,2,3); // => [1:2:3:[]]
pure(lst, 5);            // => [5:[]]
        
            
    
    (static) skip(a1, a2) → {Object}
Sequence actions, discarding the value of the second argument.
Haskell> (<*) :: f a -> f b -> f a
Parameters:
| Name | Type | Description | 
|---|---|---|
a1 | 
            
            Object | The action to perform  | 
        
a2 | 
            
            Object | The action to skip  | 
        
- Source:
 
Returns:
A new applicative functor, the result of sequencing the actions
- Type
 - Object
 
Example
const l1 = list(1,2,3);
const l2 = list(4,5,6);
skip(l1, l2);           // => [1:1:1:2:2:2:3:3:3:[]]
        
            
    
    (static) then(a1, a2) → {Object}
Sequence actions, discarding the value of the first argument.
Haskell> (*>) :: f a -> f b -> f b
Parameters:
| Name | Type | Description | 
|---|---|---|
a1 | 
            
            Object | The action to skip  | 
        
a2 | 
            
            Object | The action to perform  | 
        
- Source:
 
Returns:
A new applicative functor, the result of sequencing the actions
- Type
 - Object
 
Example
const l1 = list(1,2,3);
const l2 = list(4,5,6);
then(l1, l2);           // => [4:5:6:4:5:6:4:5:6:[]]