[MLton] cvs commit: major improvements to -show-basis

Stephen Weeks MLton@mlton.org
Mon, 16 Feb 2004 14:53:06 -0800


> So, with the program:
> 
> val b = String.<(1,1)
> 
> I'm guessing that the error
> Error: z.sml 2.9: function applied to incorrect argument
>    expects: [string] * [string]
>    but got: [int] * [int]
>    in: String.< (1, 2)
> 
> is picking up the "string" from the STRING and BASIS signatures, where it
> appears as an explicit type name.

Unfortunately not.  Early on the basis library, we declare

	type string = char vector

And then, when we bind the basis we use
 
	signature BASIS_2002 =
	   sig
		...
	   end
	   where type string = string

So, it is known in a user program that type string = char vector, as
the following program confirms.

	val _: string -> char vector = fn z => z

I guess this could be considered a bug, if the basis library spec
required the types to not be equivalent.  But I don't see an easy way
to change this.

In any case, the code to print char vector as string is definitely
used.  Another way to see that is to compile the following with
-show-basis.

	val v: char vector = Vector.tabulate (100, fn _ => #"a")