nanoscope
Version:
A Lens Library for Javascript
100 lines (75 loc) • 2.96 kB
HTML
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Source: combinator/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: combinator/Compose.js</h1>
<section>
<article>
<pre class="prettyprint source linenums"><code>"use strict";
var Lens = require('../Lens'),
get,
map;
get = function (lensA, lensB) {
return function (obj) {
return lensB.get(lensA.get(obj));
};
};
map = function (lensA, lensB) {
return function (obj, func) {
return lensA.map(
obj,
function () {
return lensB.map(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 `.map` 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), map(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#map">map</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 Wed Dec 17 2014 09:18:53 GMT-0500 (EST)
</footer>
<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>