On Tuesday, February 12, 2013 at 6:40 PM, Adam Chlipala wrote:
> On 02/12/2013 06:11 PM, Patrick Hurst wrote:
> > On Tue, Feb 12, 2013 at 10:03 AM, Adam Chlipala <[email protected]
> > (mailto:[email protected])> wrote:
> > > On 02/12/2013 12:48 AM, Patrick Hurst wrote:
> > > > fun formResultToRows (fl : folder assns) (result : $(mapU
> > > > assignmentData assns)) : list assignmentVariant =
> > > > @foldUR [assignmentData] [fn cols => list (variant (mapU unit
> > > > cols))]
> > > > (fn [nam :: Name] [rest ::_] [[nam] ~ rest] res acc =>
> > > > make [nam] () :: List.mp Variant.weaken acc
> > > > )
> > > > [] fl result
> > > In particular, I bet [Variant.fold] from the meta library is just what
> > > you need here.
> > >
> > > Also, if you are building a list of rows to insert into the database, it
> > > will probably work better to instead execute one SQL INSERT per fold
> > > iteration, so that no intermediate list needs to be materialized.
> > > Something like [Variant.app] would be appropriate for such a pattern.
> > > (Actually, it seems I only implemented a fancier version [Variant.appR]
> > > so far, but I bet you could implement the natural [Variant.app] and
> > > submit a patch with it. :])
> >
> > I'm not sure how [Variant.fold] helps me out here, since the thing I'm
> > folding over with the [@foldUR] isn't a variant. I'm fine with inserting
> > something directly into the database inside the fold as opposed to creating
> > the list and then iterating over it, but again I'm not sure how to use
> > [Variant.app] (what would that be? I'm not sure what the R suffix means
> > exactly) to implement it since I'm not folding over a variant.
> >
> > Do you mean I want to use [Variant.app] or [Variant.fold] inside the
> > [@foldUR]? If so, I'm not sure how to do so by directly inserting inside
> > the fold, since the type doesn't guarantee me [nam] is in the relevant
> > variant as far as I can tell, so I can't insert it.
> I'm suggesting using [Variant.appR] instead of [foldUR], rather than within
> the function passed to [foldUR]. (I just noticed the parameter [result] that
> seems not to influence the result above, but probably is meant to influence
> the result in the real code, so it seems that actually [Variant.appR] is
> exactly what you need.)
>
> The [R] suffix means that the fold is over a (value-level) _R_ecord.
After playing around with it a bit [Variant.appR]was indeed the solution;
thanks!
_______________________________________________
Ur mailing list
[email protected]
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur