-1

有人可以解释 Haskell 中的类型统一吗?例如:snd . snd :: (a1, (a2, c)) -> c

例子

我们如何到达 , (a1, (a2, c)) -> c, 从snd . snd?

在此先感谢您的帮助。

4

1 回答 1

4

从...开始

snd :: (x1, y1) -> y1
snd :: (x2, y2) -> y2

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

适用(.)snd, 有以下配对

b ~ (x1, y1)
c ~ y1

产量

-- (.) :: (   b    -> c ) -> (a ->     b   ) -> a -> c
-- snd :: (x1, y1) -> y1
(.) snd ::                   (a -> (x1, y1)) -> a -> y1

现在通过snd以下配对再次应用它

a        ~ (x2, y2)
(x1, y1) ~ y2

产量

-- (.) snd :: (   a    -> (x1, y1)) -> a -> y1
-- snd ::     (x2, y2) ->     y2
(.) snd snd ::                      (x2, y2) -> y1

这掩盖了从何y1而来。但由于~对称的,我们可以y2替换(x1, y1)

(.) snd snd  :: (x2, (x1, y1)) -> y1

这相当于(a1, (a2, c)) -> c最多 alpha 重命名。

于 2020-08-03T14:17:54.323 回答