For my last undergraduate research project I created a lambda calculus that would have a self distributed magma. Basically for all x,y,z you could do x @ (y @ z) = ( x @ y) @ (x @ z)
I didn't publish it because it took me another two years to implement the system in Mathematica after trying Javascript and also I didn't know what it could be used for. Also, the above self distributed operator could be implemented as a combinator or so forth.
The self distribution would have an interesting property that if you had an element in the magma then you could perform the above operator forever or you could think of it as a stream.
I have it in GitHub though if anyone wants to play with it. Ive been meaning to make video about it but I don't know if anyone would find it interesting.