Object Algebras are a nice solution to the expression problem for OO languages: <a href="https:&#x2F;&#x2F;www.cs.utexas.edu&#x2F;~wcook&#x2F;Drafts&#x2F;2012&#x2F;ecoop2012.pdf" rel="nofollow">https:&#x2F;&#x2F;www.cs.utexas.edu&#x2F;~wcook&#x2F;Drafts&#x2F;2012&#x2F;ecoop2012.pdf</a> (LtU discussion: <a href="http:&#x2F;&#x2F;lambda-the-ultimate.org&#x2F;node&#x2F;4572" rel="nofollow">http:&#x2F;&#x2F;lambda-the-ultimate.org&#x2F;node&#x2F;4572</a> )<p>Operations are implemented in a class with a method for each data type. Data is created via factories. Adding data types is done by adding new factory methods, possibly by extending another factory. Adding new operations is done by adding operation methods, possibly by extending existing operation classes.<p>The paper is quite accessible and the patterns are simple and familiar. The paper goes into type safety and composing algebras.