3

((.) folderr) のタイプを手動で派生させようとしています

(.) ::(b1 -> c1) -> (a1 -> b1) -> a1 -> c1
foldr :: (a2 -> b2 -> b2) -> b2 -> [a2] -> b2

それで:

b1 = a2 -> b2 -> b2
c1 = b2 -> [a2] -> b2

私が得るタイプを一致させる:

((a2 -> b2 -> b2) -> (b2 -> [a2] -> b2)) -> (a1 -> (a2 -> b2 -> b2)) -> a1 -> (b2 -> [a2] -> b2)

しかし、その後、この表現を減らす方法について混乱します。

何か助けはありますか?

ありがとう、
セバスチャン。

4

2 に答える 2

3

(.)inのタイプを正しく理解しました(.) foldr。は(.)1 つの引数 ( foldr) に適用されるため、 を破棄して((a2 -> b2 -> b2) -> (b2 -> [a2] -> b2))、 の型が残ります(.) foldr

(a1 -> a2 -> b2 -> b2) -> a1 -> (b2 -> [a2] -> b2)

捨てる前に、それfoldrがタイプを持つことができることを確認してください。((a2 -> b2 -> b2) -> (b2 -> [a2] -> b2))マッチングが正しく行われた場合、このチェックは失敗することはありませんが、適切なサニティ チェックです。

于 2014-05-01T19:56:50.743 に答える