free-semiring: implement + and * operators