ここが変だよStandard ML?

なんでバリアント型のタグ名(datatypeのコンストラクタ)は宣言しないといけないのに、レコード型のフィールド名は宣言しなくていいんだろう…。そのせいで、双対のはずなのに、いろいろと齟齬が発生しているような(多相レコードとか多相バリアントまではいかないとして)。教えるときにも困ります。