[MLton] withtype in signature?

Wesley W. Terpstra wesley@terpstra.ca
Tue, 13 Sep 2005 10:59:58 +0200


On Sep 6, 2005, at 7:30 PM, Stephen Weeks wrote:
> The way I typically work around the absence of withtype in signatures
> is to make all the withtypes be datatypes.  That is,
>
>   datatype test = A of foo * baz | B
>   and foo = Foo of string * test
>   and baz = Baz of int

That is indeed a useful trick.
However, for my purposes it doesn't work because the code output
is auto-generated and isn't allowed to introduce constructors.

If I am writing code by hand and have this problem, this is definitely
the solution I will use.

>   type test'
>   type foo = string * test'
>   type baz = int
>   datatype test = A of foo * baz | B
>   sharing type test = test'

The above got me thinking. Here's what I eventually used:

signature BAR =
   sig
     type foo
     type baz
     datatype test = A of foo * baz | B
   end

Then I use transparent signature ascription.

Is there any way to get 'sharing type' or 'where type' to do the work?
If not, what I have is workable: no identifiers in the public namespace.