Skip to content
DrBooleanPublic

About

Composable kmett style lenses

Resources

Stars

216 stars

Watchers

13 watching

Forks

Latest commit

 

History

39 Commits

Folders and files

Repository files navigation

lenses.js

Functional lenses that compose and stuff

require('./src/lenses').expose(global);
var compose = require('pointfree-fantasy').compose;

// setup an easy test fn
var toUpperCase = function(x) { return x.toUpperCase(); };

// here's the data structure
var user = {name: "Bob", addresses: [{street: '99 Maple', zip: 94004, type: 'home'}, {street: '2302 Powell', zip: 94001, type: 'work'}]}

// make some lenses
var L = makeLenses(['name', 'addresses', 'street']);

// compose the lenses
var secondAddressesStreet = compose(L.addresses, L._num(2), L.street)

// mess with the user
over(secondAddressesStreet, toUpperCase, user) // { name: 'Bob', addresses: [ { street: '99 Maple', zip: 94004, type: 'home' }, { street: '2302 POWELL', zip: 94001, type: 'work' } ] }

view(L.name, user) // 'Bob'

set(L.name, 'Kelly', user) // {name: "Kelly", addresses: [{street: '99 Maple', zip: 94004, type: 'home'}, {street: '2302 Powell', zip: 94001, type: 'work'}]}

For those not already familiar with lenses, a brief introduction can be found here

ROADMAP:

  • add traverses and folds
  • more combinators
  • prisms
  • this list is getting long...

About

Composable kmett style lenses

Resources

Stars

216 stars

Watchers

13 watching

Forks

Releases

Packages

Used by

Contributors

Languages