Skip to content

tarasowski/lambda.lenses

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

lambda.lenses

Kmett style lenses in your face!

  • API
module.exports = {
    lensPath,
    lensIndex,
    lensProp,
    set,
    view,
    over
}
const user = { id: 1, name: 'foo' }

const propName = prop('name')(user)

const assocName = assoc('name')('bar')(user)

const toUpper = str => str.toUpperCase()

const cubed = num => num ** 3

const idLens = lensProp('id')

const viewId = view(idLens, user) // > 1

const setId = set(idLens, 2, user) // > { id: 2, name: "foo" }

const cubedId = over(idLens, cubed, setId) // > { id: 8, name: "foo" }

const nameLense = lensProp('name')

const getName = view(nameLense, user) // > "foo"

const setName = set(nameLense, 'flavio', user) // > { id: 1, name: "flavio" }

const capName = over(nameLense, toUpper, setName) // > { id: 1, name: "FLAVIO" }
const obj = {
  people: {
    me: {
      friends: [
        { name: 'Kike', brother: true },
        { name: 'Samuel' },
        { name: 'José' },
        { name: 'Josué' },
      ],
      habilities: [],
    },
  },
}

const bf = lensPath(['people', 'me', 'friends', 0, 'name'])

view(bf, obj) // > Kike
set(bf, 'Mike', obj) // > Object(...[{name:'Mike'}])

About

Kmett lenses in your face!

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published