Traversal
A Traversal<S, A> focuses zero or more values A inside a source S.
type Traversal<S, A> = {
readonly _tag: 'traversal'
readonly getAll: (s: S) => ReadonlyArray<A>
readonly modify: (f: (a: A) => A) => <T extends S>(s: T) => T
}
Traverse An Array
import { Lens, compose, each } from '@fuiste/optics'
type Team = { members: string[] }
const members = Lens<Team>().prop('members')
const allMembers = compose(members, each<string>())
allMembers.getAll({ members: ['Ada', 'Grace'] })
// ['Ada', 'Grace']
allMembers.modify((name) => name.toUpperCase())({
members: ['Ada', 'Grace'],
})
// { members: ['ADA', 'GRACE'] }
Traversals are for uniform updates across every focus. If you want exactly one array slot, use
index.
Notes
getAllreturns every focus.modifyupdates every focus.- Traversals through missing prism branches are no-ops.
eachis the built-in array traversal.