[MLton] Structures inside a function?

Wesley W. Terpstra terpstra@gkec.tu-darmstadt.de
Wed, 19 Jan 2005 19:07:04 +0100

Hi! I recently ran into a problem where I needed to use a structure inside a
function. However, this doesn't appear to be possible; what do I do instead?

Simplified problem:

signature RESIDUE_PARAM =
    structure Base: EUCLIDEAN_DOMAIN
    val modulus: Base.t

functor Residue(P : RESIDUE_PARAM) : RING = ...
functor Math(R : RING) = ...

functor Factor(E : EUCLIDEAN_DOMAIN) =
    fun factor x =
        structure R = Residue(struct structure Base = E val modulus = x)
	structure M = Math(R)
	open M
        (* use various methods defined in Math to factor x *)

Normally, when you use a residue ring, it is a top-level construction.
Therefore, I haven't needed this before. However, I was implementing
Pollard's rho algorithm and then I suddenly needed a ring which was
parameterized by a function parameter!

I have run into this in several other places, but have always avoided
the problem. Here, I don't see any choice other than to redefine all the
methods I need from Math (lots) in local scope, which really sucks.

Wesley W. Terpstra