All atoms and actions by default include the pipe operator for easy extending and composing.
You can create your own operators to enhance your code and make it more modular.
If an operator doesn’t create a new atom and instead mutates the passed one, you should use the with prefix.
We use T extends Atom instead of the simpler <T>(length: string): (anAtom: Atom<T>) => Atom<T> & {...} to preserve all additional properties added by previous operators.