Requires
- module:lambda/curry
 - module:operation/map
 
Methods
(static) createLens(getter, setter) → {function}
The createLens function acts like a factory for new types of lenses
- Version:
 - 3.0.0
 
- Source:
 
Parameters:
| Name | Type | Description | 
|---|---|---|
getter | 
            
            
            
                
function
            
             | 
            
            
            
                 A function defining how to get a value from the structure  | 
        
setter | 
            
            
            
                
function
            
             | 
            
            
            
                 A function defining how to clone the structure and set a value  | 
        
Returns:
- Type:
 - 
        
function 
A factory function which can be used to create lens types
Example
const {createLens, over} = require('futils').optic;
const MapLens = createLens(
    (key, map) => map.get(key),
    (key, val, map) => new Map([...map.entries()]).set(key, val)
);
const LName = MapLens('name');
const data = new Map([['name', 'Nice blue'], ['code', '#3d73cc']]);
const upper = (a) => a.toUpperCase();
over(LName, upper, data); // -> Map([['name', 'NICE BLUE'], ['code', '#3d73cc']])
(static) lenses(…a) → {Object}
The lenses function, which allows to create a collection of lenses from strings. Also creates a "index" lens which can be used with arrays
- Version:
 - 3.0.0
 
- Source:
 
Parameters:
| Name | Type | Attributes | Description | 
|---|---|---|---|
a | 
            
            
            
                
String
            
             | 
            
                
                
                
                
                    <repeatable> | 
            
            
            
                 Strings representing the properties of an object  | 
        
Returns:
- Type:
 - 
        
Object 
Collection of lenses
Example
const {lenses, over} = require('futils').optic;
const L = lenses('name');
const color = {color: '#3d73cc', name: 'Nice blue'};
const upper = (a) => a.toUpperCase();
over(L.name, upper, color); // -> {color: '#3d73cc', name: 'NICE BLUE'}
(static) mapped(f, a) → {LensVal}
The mapped function, which is a special lens for arrays.
- Version:
 - 3.0.0
 
- Source:
 
Parameters:
| Name | Type | Description | 
|---|---|---|
f | 
            
            
            
                
function
            
             | 
            
            
            
                 Data transformation function  | 
        
a | 
            
            
            
                
Array
            
             | 
            
            
            
                 The nested data structure  | 
        
Returns:
- Type:
 - 
        
LensVal 
A LensVal
Example
const {mapped, over} = require('futils').optic;
const even = (n) => n % 2 === 0;
over(mapped, even, [1, 2, 3]); // -> [false, true, false]
(static) over(l, f, a) → {Object|Array}
The over function. Over allows to apply a function over a focused value of a data structure and return the whole structure
- Version:
 - 3.0.0
 
- Source:
 
Parameters:
| Name | Type | Description | 
|---|---|---|
l | 
            
            
            
                
Lens
            
             | 
            
            
            
                 A lens to focus with  | 
        
f | 
            
            
            
                
function
            
             | 
            
            
            
                 A tranformation function  | 
        
a | 
            
            
            
                
Object
|
Array
            
             | 
            
            
            
                 The structure to operate on  | 
        
Returns:
- Type:
 - 
        
Object|Array 
A manipulated clone of the structure
Example
const {lenses, over} = require('futils').optic;
const L = lenses('name');
const color = {code: '#3d73cc', name: 'Nice blue'};
const upper = (a) => a.toUpperCase();
over(L.name, upper, color); // -> {code: '#3d73cc', name: 'NICE BLUE'}
(static) set(l, v, a) → {Object|Array}
The set function, which allows to set a property to a value on a data structure and return the structure afterwards
- Version:
 - 3.0.0
 
- Source:
 
Parameters:
| Name | Type | Description | 
|---|---|---|
l | 
            
            
            
                
Lens
            
             | 
            
            
            
                 A lens to focus with  | 
        
v | 
            
            
            
                
any
            
             | 
            
            
            
                 The value to set  | 
        
a | 
            
            
            
                
Object
|
Array
            
             | 
            
            
            
                 The structure to operate on  | 
        
Returns:
- Type:
 - 
        
Object|Array 
A manipulated clone of the structure
Example
const {lenses, set} = require('futils').optic;
const L = lenses('name');
const color = {code: '#3d73cc'};
set(L.name, 'Nice blue', color); // -> {code: '#3d73cc', name: 'Nice blue'}
(static) view(l, a) → {any|null}
The view function. It allows to view a focused property of a data structure and return the value of it. If the property does not exist, null is returned
- Version:
 - 3.0.0
 
- Source:
 
Parameters:
| Name | Type | Description | 
|---|---|---|
l | 
            
            
            
                
Lens
            
             | 
            
            
            
                 A lens to focus with  | 
        
a | 
            
            
            
                
Object
|
Array
            
             | 
            
            
            
                 The structure to operate on  | 
        
Returns:
- Type:
 - 
        
any|null 
The focused value or null
Example
const {lenses, view} = require('futils').optic;
const L = lenses('name');
const color = {code: '#3d73cc', name: 'Nice blue'};
view(L.name, color); // -> 'Nice blue'