有人可以解释 Haskell 中的类型统一吗?例如:snd . snd :: (a1, (a2, c)) -> c
我们如何到达 , (a1, (a2, c)) -> c
, 从snd . snd
?
在此先感谢您的帮助。
有人可以解释 Haskell 中的类型统一吗?例如:snd . snd :: (a1, (a2, c)) -> c
我们如何到达 , (a1, (a2, c)) -> c
, 从snd . snd
?
在此先感谢您的帮助。
从...开始
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 重命名。