类型之间有什么区别
(seq of nat * seq of nat) -> nat
和
seq of nat * seq of nat -> nat
根据语言参考手册*
具有更高->
的优先级,因此括号无效;它们在语义上是相同的。但是考虑函数定义
length: (seq of nat * seq of nat) -> nat
length (mk_(l,m)) == len l + len m;
length0: seq of nat * seq of nat -> nat
length0 (l,m) == len l + len m;
每个都使用一种类型,并且定义中使用的模式必须不同才能通过类型检查。这两种类型之间似乎存在差异。这里发生了什么?通过括号,它将参数解释为产品,但没有括号有两个参数,但不知何故,函数的参数类型仍然是产品。这是相当混乱的。有人可以澄清吗?