that checks an AST and outputs error messages if anything is
wrong. (Why is our type-checker called transProg
rather than something like typeCheck? Because we'll
be extending it in Homework 4 to type-check and translate the AST
to our intermediate representation.)

You will find a structure Types defining a
datatype to represent Tiger types in
$TIGER/chap5/types.sml.

You should submit:

A semant.sml file containing your code

Any other source files you wrote to support your checker

Your sources.cm file

A text file describing

The members of your team

Anything you think is of interest about your code.

Words to the wise:

Appel's advice on pages 121/122 about breaking the the work into a
part A and a part B is good advice.

One potentially confusing thing is that
there are two "ty" types:

Types.ty

These are semantic values—they represent the
various types found in Tiger. This is carefully
designed to assist the type-checking process,
e.g. handling circularities.

Absyn.ty

These are syntactic values—they represent the
notation in Tiger for describing types.

Obviously, we can map any Absyn.ty chunk of Tiger
type syntax to a Types.ty value. But don't
confuse the two different datatypes. Anytime you must handle a
description of a Tiger type, be clear in your mind: are you
handling a semantic value or a chunk of syntax?

This is a significant programming task. I found it harder than
the parser as a matter of software engineering. Start
yesterday.