added y combinator and char function