rename the types.py module to core.py
now all _CallableMaker object are lazy
add case when a expression function is used in the body of an function