optics/lens
import "github.com/IBM/fp-go/optics/lens"
Lens is an optic used to zoom inside a product.
Functions
func Compose[S, A, B any](ab Lens[A, B]) func(Lens[S, A]) Lens[S, B]
Compose combines two lenses and allows to narrow down the focus to a sub-lens
func ComposeOption[S, B, A any](defaultA A) func(ab Lens[A, B]) func(Lens[S, O.Option[A]]) Lens[S, O.Option[B]]
ComposeOption combines a Lens that returns an optional value with a Lens that returns a definite value
the getter returns an Option[B] because the container A could already be an option
if the setter is invoked with Some[B] then the value of B will be set, potentially on a default value of A if A did not exist
if the setter is invoked with None[B] then the container A is reset to None[A] because this is the only way to remove B
func ComposeOptions[S, B, A any](defaultA A) func(ab Lens[A, O.Option[B]]) func(Lens[S, O.Option[A]]) Lens[S, O.Option[B]]
ComposeOptions combines a Lens that returns an optional value with a Lens that returns another optional value
the getter returns None[B] if either A or B is None
if the setter is called with Some[B] and A exists, 'A' is updated with B
if the setter is called with Some[B] and A does not exist, the default of 'A' is updated with B
if the setter is called with None[B] and A does not exist this is the identity operation on 'S'
if the setter is called with None[B] and A does exist, 'B' is removed from 'A'
func ComposeRef[S, A, B any](ab Lens[A, B]) func(Lens[*S, A]) Lens[*S, B]
Compose combines two lenses and allows to narrow down the focus to a sub-lens
func FromNillable[S, A any](sa Lens[S, *A]) Lens[S, O.Option[*A]]
FromPredicate returns a Lens for a property accessibly as a getter and setter that can be optional
if the optional value is set then the nil value will be set instead
func FromNillableRef[S, A any](sa Lens[*S, *A]) Lens[*S, O.Option[*A]]
FromNillableRef returns a Lens for a property accessibly as a getter and setter that can be optional
if the optional value is set then the nil value will be set instead
func FromNullableProp[S, A any](isNullable func(A) O.Option[A], defaultValue A) func(sa Lens[S, A]) Lens[S, A]
FromNullableProp returns a Lens from a property that may be optional. The getter returns a default value for these items
func FromNullablePropRef[S, A any](isNullable func(A) O.Option[A], defaultValue A) func(sa Lens[*S, A]) Lens[*S, A]
FromNullablePropRef returns a Lens from a property that may be optional. The getter returns a default value for these items
func FromOption[S, A any](defaultValue A) func(sa Lens[S, O.Option[A]]) Lens[S, A]
FromFromOption returns a Lens from an option property. The getter returns a default value the setter will always set the some option
func FromOptionRef[S, A any](defaultValue A) func(sa Lens[*S, O.Option[A]]) Lens[*S, A]
FromFromOptionRef returns a Lens from an option property. The getter returns a default value the setter will always set the some option
func FromPredicate[S, A any](pred func(A) bool, nilValue A) func(sa Lens[S, A]) Lens[S, O.Option[A]]
FromPredicate returns a Lens for a property accessibly as a getter and setter that can be optional
if the optional value is set then the nil value will be set instead
func FromPredicateRef[S, A any](pred func(A) bool, nilValue A) func(sa Lens[*S, A]) Lens[*S, O.Option[A]]
FromPredicateRef returns a Lens for a property accessibly as a getter and setter that can be optional
if the optional value is set then the nil value will be set instead
func IMap[E any, AB ~func(A) B, BA ~func(B) A, A, B any](ab AB, ba BA) func(Lens[E, A]) Lens[E, B]
func Id[S any]() Lens[S, S]
Id returns a [Lens] implementing the identity operation
func IdRef[S any]() Lens[*S, *S]
IdRef returns a [Lens] implementing the identity operation
func MakeLens[GET ~func(S) A, SET ~func(S, A) S, S, A any](get GET, set SET) Lens[S, A]
MakeLens creates a [Lens] based on a getter and a setter function. Make sure that the setter creates a (shallow) copy of the
data. This happens automatically if the data is passed by value. For pointers consider to use MakeLensRef
and for other kinds of data structures that are copied by reference make sure the setter creates the copy.
func MakeLensCurried[GET ~func(S) A, SET ~func(A) EM.Endomorphism[S], S, A any](get GET, set SET) Lens[S, A]
MakeLensCurried creates a [Lens] based on a getter and a setter function. Make sure that the setter creates a (shallow) copy of the
data. This happens automatically if the data is passed by value. For pointers consider to use MakeLensRef
and for other kinds of data structures that are copied by reference make sure the setter creates the copy.
func MakeLensRef[GET ~func(*S) A, SET func(*S, A) *S, S, A any](get GET, set SET) Lens[*S, A]
MakeLensRef creates a [Lens] based on a getter and a setter function. The setter passed in does not have to create a shallow copy, the implementation wraps the setter into one that copies the pointer before modifying it
Such a [Lens] assumes that property A of S always exists
func MakeLensRefCurried[S, A any](get func(*S) A, set func(A) EM.Endomorphism[*S]) Lens[*S, A]
MakeLensRefCurried creates a [Lens] based on a getter and a setter function. The setter passed in does not have to create a shallow copy, the implementation wraps the setter into one that copies the pointer before modifying it
Such a [Lens] assumes that property A of S always exists
func Modify[S any, FCT ~func(A) A, A any](f FCT) func(Lens[S, A]) EM.Endomorphism[S]
Modify changes a property of a [Lens] by invoking a transformation function if the transformed property has not changes, the method returns the original state
Types
type Lens
Lens is a reference to a subpart of a data type
type Lens[S, A any] struct {
Get func(s S) A
Set func(a A) EM.Endomorphism[S]
}Fields
Get func(s S) ASet func(a A) EM.Endomorphism[S]
