Support type annotations.

Closes #138. 
Why isn't this an enum?