Oh, sorry. That is because I accidentally posted the version with your suggested change in it.

What I'm trying to figure out is why I have to put an explicit type here:

fun checkPassword (r : {Email : string, Password : string}) =

instead of just using:
fun checkPassword r =


On 10/21/2012 06:50 PM, Adam Chlipala wrote:
On 10/21/2012 06:41 PM, David Snider wrote:
My user.urs file has:

val main : unit -> transaction page

Well, I copied your code into a .ur file, gave it a .urs file like the above, and changed the [Sha.hash] references to use an identity function instead. It all type-checks for me. I would need a self-contained complete source archive to say anything else.

On 10/21/2012 06:16 PM, Adam Chlipala wrote:
That didn't turn out to be it. Your [main] function is ambiguous; it's not obvious from the code there now that it returns standalone pages. You can use type annotations in your .ur file to indicate the type, but it would be better to create a .urs file declaring [main] as in most of the demos.

On 10/21/2012 05:55 PM, David Snider wrote:
Ah, OK...

Here is the whole source:
http://pastebin.com/EZMqZVkd

Is it that it can't decide whether to take it from the User table record or the cookie record?

On 10/21/2012 05:42 PM, Adam Chlipala wrote:
I need more context to give a complete answer. The error message means that some type is not uniquely determined, and the message will show you where the undetermined type appears.

My first guess, though: Start the function declaration like this:
    fun checkPassword (r : {Email : string, Password : string}) =

Otherwise, there might be other fields in [r].

On 10/21/2012 05:39 PM, David Snider wrote:
What's the correct way of doing this?

Error: Some constructor unification variables are undetermined in declaration

cookie userSession : { Email : string, Password : string }

... snip ...

fun checkPassword r =
let
   val cryptPass = {Email=r.Email, Password=Sha.hash r.Password}
in
   re' <- oneOrNoRows1(SELECT user.Id
                        FROM user
                       WHERE user.Email = {[cryptPass.Email]}
AND user.Password = {[cryptPass.Password]});
   case re' of
      None => return False
| Some re => setCookie userSession { Value = cryptPass, Expires=None,Secure=False };
      return True
end



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


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

Reply via email to