Programming Language Design and Implementation - using Standard ML (New Jersey)