SML for the working programmer drafts