Marc Weber wrote:
Excerpts from Adam Chlipala's message of Fri Dec 17 02:00:30 +0100 2010:
Marc Weber wrote:
            == main.urs ==
            val main : unit ->   transaction page
            val recIdTopLevel: a ::: Type ->   a ->   a
The important difference between the two definitions is that [recId] has
explicit type annotations for arguments and return type, while
[recIdTopLevel] doesn't.  Type inference for Ur is undecidable, so
sometimes you need to annotate to satisfy the type checker.
So the type annotations in main.urs are for humans only?

No, signatures hide details of implementations, just like in ML. But the following is true, too:

So the types of declarations in .ur and .urs file are compared after
type checking has taken place ..

That is, in checking a module, principal types are synthesized for all its components, then these types are checked for compatibility with the signature. The error message you gave was generated before the first stage finished.

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

Reply via email to