## Modules

## Traits

A trait capturing the notion of a type where a

*delta*can be computed between two of its items. For example, given`a1=[0,1,2]`

and `a2=[1,1,2]`

, we could compute a delta `d`

such
that `a1.transform_into(d)`

returns `a2`

. Observe that the delta
has an *orientation*which (implicitly) means it goes from*this*item to the*other*,A trait capturing the essence of an incremental computation from

`self`

to some item `T`

. This is similar to the `Into`

trait, but
with the ability to work with *deltas*. To understand this, consider the following:A trait describing something which can be

*transformed*by applying a*delta*. For example, an array`[0,1,2]`

can be
transformed into another `[3,1,2]`

by applying a delta which
assigns element `0`

to `3`

. This trait describes the functional
case, where the receiver is not modified. **Furthermore, this trait allows for the possibility that the transformation may not succeed**.A trait describing something which can be

*transformed*in place by applying a*delta*. For example, an array`[0,1,2]`

can be
transformed into another `[3,1,2]`

by applying a delta which
assigns element `0`

to `3`

. This trait describes the imperatice
case where the receiver is modified in place. **Furthermore, this trait allows for the possibility that an error is returned**.A trait describing something which can be

*transformed*in place by applying a*delta*. For example, an array`[0,1,2]`

can be
transformed into another `[3,1,2]`

by applying a delta which
assigns element `0`

to `3`

. This trait describes the imperative
case where the receiver is modified in place.A trait describing something which can be

*transformed*by applying a*delta*. For example, an array`[0,1,2]`

can be
transformed into another `[3,1,2]`

by applying a delta which
assigns element `0`

to `3`

. This trait describes the functional
case, where the receiver is not modified.