<div dir="ltr">Hello<div><br></div><div>I am wondering if there's a well known algebraic structure which follows the following patterns. Let's call it S:</div><div><br></div><div>It's update-able with some opaque "a" (which can be an element or an operation with an element):</div><div><br></div><div>    update :: S -> a -> S<br></div><div><br></div><div>There's a well defined zero for it:</div><div><br></div><div>    empty :: S</div><div><br></div><div>Operations on it are idempotent:</div><div><br></div><div>    update s a == update (update s a) a</div><div><br></div><div>Every S can be reconstructed from a sequence of updates:</div><div><br></div><div>    forall s. exists [a]. s == foldl update empty [a]</div><div><br></div><div><br></div><div>An example of this would be Data.Set:</div><div><br></div><div>    empty = Set.empty</div><div>    update = flip Set.insert</div><div><br></div><div>Is there something like this in algebra?</div><div><br></div><div>Cheers,</div><div>Gleb</div></div>