2011-05-16 72 views
3

我需要以下属性的功能。与类型变量等价功能类型的

(C-> d) - >(A-> B-> C) - > A-> B-> d

我的功能:(。)

funktionD = 。

但():吨funktionD

funktionD ::(A - > B) - >(C - > d - >一) - >Ç - > d - >乙

是不是等于?

+2

为什么不自己替代的类型变量,并尝试一下? – delnan 2011-05-16 17:56:12

+2

您也可以只写'funktionD ::(C-> d) - >(A-> B-> C) - > A-> B-> D'你上面的函数定义,如果类型是错误的编译器会告诉你。 – MatrixFrog 2011-05-16 22:30:12

+1

@MatrixFrog:这也是一个很好的建议。永远不要低估抢先与Haskell编译器争论的价值。仅仅因为它总是赢得争论并不意味着你在这个过程中无法学到东西! – 2011-05-16 22:50:43

回答

4

它。类型变量 - 以小写字母写 - 就是变量。只要其中相同变量的模式保持不变,您可以重新命名它们。

此外,本质上是相同的理由,你给类型的签名,只有一个(不包括崩溃或进入无限循环的功能,这是)该类型的可能的功能。需要思考的东西!

2

我觉得是。用c替换a(反之亦然),然后用d替换b(反之亦然),它们是相同的。