
:- op(700,xfx,[=>,==>]).
:- op(800,fx,eval).

i/X => X.

k/X/Y => X .

s/F/G/X => (F/X)/(G/X).

% Lazy:
E1/E2 => R1/E2 :- E1 => R1.

% Eager:
E1/E2 => E1/R2 :- E2 => R2.

X ==> Y :- X => R, !, R ==> Y.
X ==> X.

eval X :-
	X => Y, !,
	write(Y), nl,
	eval Y.

eval X.

