SKI Combinator Calculus
en.wikipedia.org
en.wikipedia.org
Instead of all the dragging and aligning, wouldn't it be simpler if you could just click on one combinator to use as function, and then on another to use as argument? You could do away with the whole canvas.
> The simplest possible term forming a basis is X = λx λy λz. x z (y (λ_.z)), which satisfies X (X X) (X (X X) X X X X X) = K, and X (X (X X (X X (X X))(X (X (X X (X X)))))) X X = S.