1234567891011121314151617181920212223242526272829 |
- package immutable
-
- // Immutable represents an immutable chain that, if passed to FastForward,
- // applies Fn() to every element of a chain, the first element of this chain is
- // represented by Base().
- type Immutable interface {
- // Prev is the previous element on a chain.
- Prev() Immutable
- // Fn a function that is able to modify the passed element.
- Fn(interface{}) error
- // Base is the first element on a chain, there's no previous element before
- // the Base element.
- Base() interface{}
- }
-
- // FastForward applies all Fn methods in order on the given new Base.
- func FastForward(curr Immutable) (interface{}, error) {
- prev := curr.Prev()
- if prev == nil {
- return curr.Base(), nil
- }
- in, err := FastForward(prev)
- if err != nil {
- return nil, err
- }
- err = curr.Fn(in)
- return in, err
- }
|