In comp.lang.ml there has been a discussion going on about some compilers (Moscow ML if I recall) which allow a top level declaration which has a type which cannot be polymorphic, but where the mono-type it is isn't determined yet. Some compilers seem to reject this while Moscow leaves the types free until the first use. Then they are fixed with what worked there.