The issue here is that in Ur/Web, HTML fragments in general are allowed to bind form fields and refer to form fields that were bound earlier. The type of [join] reflects the fact that the 2nd argument may refer to fields defined in the first. The error message below is talking about U82 as the "extra" fields bound by the first [join] argument. If we specify that type parameter as the empty record, then the problem goes away.

So here's an easy way to make that specification:
    val f = List.foldl (join : xbody -> xbody -> xbody) <xml/> e

On 05/27/2013 08:45 PM, Istvan Chung wrote:
I am attempting to use List.foldl to join a list xbody:

    val a : xbody =<xml><p>Hello</p></xml>
    val b : xbody =<xml><p>World!</p></xml>
    val c = join a b
    val d = (join b (join a<xml/>))
    val e : list xbody = (a :: b :: [])
    (* All ok up to here... *)
    val f = List.foldl join<xml/>  e

Which causes Ur/Web to give the (opaque to me) error message:

     Unification failure
     Expression:
     join [<UNIF:U80::{Unit}>] [<UNIF:U81::{Type}>] [<UNIF:U82::{Type}>]
      [<UNIF:U83::{Type}>]
       Have con:
     (xml<UNIF:U80::{Unit}>  <UNIF:U81::{Type}>  <UNIF:U82::{Type}>) ->
      (xml<UNIF:U80::{Unit}>  (<UNIF:U81::{Type}>  ++<UNIF:U82::{Type}>)
        <UNIF:U83::{Type}>) ->
       xml<UNIF:U80::{Unit}>  <UNIF:U81::{Type}>
        (<UNIF:U82::{Type}>  ++<UNIF:U83::{Type}>)
       Need con:
     (xml<UNIF:U80::{Unit}>  <UNIF:U81::{Type}>  <UNIF:U82::{Type}>) ->
      (xml<UNIF:U80::{Unit}>  (<UNIF:U81::{Type}>  ++<UNIF:U82::{Type}>)
        <UNIF:U83::{Type}>) ->
       xml<UNIF:U80::{Unit}>  (<UNIF:U81::{Type}>  ++<UNIF:U82::{Type}>)
        <UNIF:U83::{Type}>
     Constructor occurs check failed
     Have:<UNIF:U81::{Type}>
     Need:<UNIF:U81::{Type}>  ++<UNIF:U82::{Type}>

Why does this happen, and why does no such error occur for expression
[d], which seems to perform the same set of joins?

_______________________________________________
Ur mailing list
[email protected]
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur

Reply via email to