fix #31, define the notion of "principal type" in the spec