0

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

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

それで:

a1 ~ (b2 -> c2)
b1 ~ (a2 -> b2)
b1 ~ a2

だから私はそれを得る(foldr (.)) :: (a2 -> b2) -> [(b2 -> c2)] -> (a2 -> b2)

しかし、GHCi は次のように返します。:t (foldr (.)) :: (a -> b) -> [b -> b] -> a -> b

なぜ b2 と c2 は同じですか?

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

4

1 に答える 1

5

(.)asの型を見ると

(b2 -> c2) -> (a2 -> b2) -> (a2 -> c2)

それから

b1 ~ (a2 -> b2)
b1 ~ (a2 -> c2)

それで(b2 ~ c2)

次に、のタイプを見ることができ(foldr (.))ます

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

これは GHC が導出する型です。

于 2014-05-01T22:53:36.727 に答える