Vectors are implicitly treated as [[emmy.structure/Structure]] instances with an up
orientation, and implement [[g/freeze]] identically. They can act as zero?
, but they can't act as one?
or identity?
; those are reserved for instances that have no effect on multiplication.
Sequences can't act as functions or respond to any of the [[g/zero?]]-and-friends predicates. They pass along the operations that they can implement to their elements via [[map]].
Maps acts as functors that can be perturbed and zeroed out (and pass along calls to [[g/partial-derivative]] to their elements!), but not much else.
NOTE: There is probably a case for making something like [[emmy.structure/Structure]] backed by a map, for a sort of sparse structure, or a dataframe-like structure with named fields instead of positional fields. Nothing like this exists yet!
Emmy treats Clojure's set data structure as a monoid, with set union as the addition operation and the empty set as the zero element.