Add checkCPP function to hide the internals of the type checker.
Add compileCPP function to hide the internals of the compiler.
Get rid of bool type in Core language and use 1 and 0 instead.

Because JVM does not have a boolean type, distinguishing bool and int does not
help generating efficient bytecode.
Remove outdated comments.
Use <$ instead of *> with pure.
Import Prelude hiding (exp) to avoid name conflicts.

This binding for `exp' shadows the existing binding imported from `Prelude'.
Make imported symbols explicit by listing them in import Mod (..).