[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 =
  sig
    structure Base: EUCLIDEAN_DOMAIN
    val modulus: Base.t
  end
functor Residue(P : RESIDUE_PARAM) : RING = ...
functor Math(R : RING) = ...
functor Factor(E : EUCLIDEAN_DOMAIN) =
  struct
    fun factor x =
      let
        structure R = Residue(struct structure Base = E val modulus = x)
	structure M = Math(R)
	open M
      in
        (* use various methods defined in Math to factor x *)
      end
  end
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