2014-04-20 44 views
0

我试图理解为什么类型:哪种类型的(翻转)?

(flip .) is: (a -> a1 -> b -> c) -> a -> b -> a1 -> c

首先,类型:

flip: is (a -> b -> c) -> b -> a -> c (.): is (b -> c) -> (a -> b) -> a -> c

我将重命名变量更清晰在我的解释中,所以类型:

flip: is (ax -> bx -> cx) -> bx -> ax -> cx (.): is (by -> cy) -> (ay -> by) -> ay -> cy

然后我尝试substituing这样的:

ax = (by -> cy) bx = (ay -> by) cx = ay -> cy

因此产生的类型是:(AY - >通过)(通过 - > CY) - >唉 - > CY,这与正确的结果不同。

任何帮助?

谢谢, Sebastián。

+5

你知道'(flip。)'和'flip(。)'意思完全不同吗? – delnan

+0

不,我不确定类型和应用其中一种或另一种的效果之间的差异。 – Fof

+3

''(flip)''是'(。)flip',就像'(2+)'是'(+)2'。 – duplode

回答

7

(flip .)(.) flip是,所以:

  • (.) :: (bx -> cx) -> (ax -> bx) -> ax -> cx
  • flip :: (ay -> by -> cy) -> by -> ay -> cy
  • (.) flip
    • bxay -> by -> cy
    • cxby -> ay -> cy
    • 所以它的所有(ax -> (ay -> by -> cy)) -> ax -> (by -> ay -> cy)
      这只是(ax -> ay -> by -> cy) -> ax -> by -> ay -> cy
      (flip .) :: (a -> a1 -> b -> c) -> a -> b -> a1 -> c相匹配。