UNPKG

nanoscope

Version:

A Lens Library for Javascript

100 lines (75 loc) 2.96 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>JSDoc: Source: compose/Compose.js</title> <script src="scripts/prettify/prettify.js"> </script> <script src="scripts/prettify/lang-css.js"> </script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> </head> <body> <div id="main"> <h1 class="page-title">Source: compose/Compose.js</h1> <section> <article> <pre class="prettyprint source linenums"><code>"use strict"; var Lens = require('../Lens'), get, over; get = function (lensA, lensB) { return function (obj) { return lensB.get(lensA.get(obj)); }; }; over = function (lensA, lensB) { return function (obj, func) { return lensA.over( obj, function () { return lensB.over(lensA.get(obj), func); } ); }; }; /** * Create the composite of two `Lens`es. For instance, to create a `Lens` for `arr[i][j]`: * * ```javascript * arrIJLens = new Compose( * new IndexedLens(1), * new IndexedLens(0) * ); * ``` * * Then `arrIJLens.get`, `.set`, and `.over` first call the appropriate function for the first `Lens`, then * the appropriate function for the second `Lens` and return the result. * * @param {Lens} lensA The first `Lens` to call functions on * @param {Lens} lensB The second `Lens` to call functions on * @returns {Compose} * @constructor */ var Compose = function (lensA, lensB) { this.base = Lens; this.base(get(lensA, lensB), over(lensA, lensB), { _lensA: lensA, _lensB: lensB }); }; Compose.prototype = new Lens; module.exports = Compose;</code></pre> </article> </section> </div> <nav> <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Compose.html">Compose</a></li><li><a href="Getter.html">Getter</a></li><li><a href="IndexedLens.html">IndexedLens</a></li><li><a href="IndexedLens.Unsafe.html">Unsafe</a></li><li><a href="Lens.html">Lens</a></li><li><a href="MultiLens.html">MultiLens</a></li><li><a href="Optional.html">Optional</a></li><li><a href="PathLens.html">PathLens</a></li><li><a href="PathLens.Unsafe.html">Unsafe</a></li><li><a href="Setter.html">Setter</a></li><li><a href="SliceLens.html">SliceLens</a></li></ul><h3>Global</h3><ul><li><a href="global.html#get">get</a></li><li><a href="global.html#IdLens">IdLens</a></li><li><a href="global.html#over">over</a></li></ul> </nav> <br clear="both"> <footer> Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.3.0-alpha11</a> on Thu Dec 11 2014 10:53:30 GMT-0500 (EST) </footer> <script> prettyPrint(); </script> <script src="scripts/linenumber.js"> </script> </body> </html>