extended with fix-point combinator(work in progress...)