Principal type-schemes and lambda-calculus semantics