作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习 Haskell,想知道为什么
[fst,snd] :: [(a,a) -> a]
[fst,snd] :: [(a,b) -> a, (c, d) -> d]
最佳答案
关键是,在 Haskell 中,列表是一种同构数据结构(当然,您可以有异构列表,但这是另一回事)。因此,当您将多态函数用作列表元素时,它们应该具有相同的类型。
在您的情况下,您使用的是 fst :: (a , b) -> a
和 snd :: (a, b) -> b
作为列表元素,它们 必须有相同的类型。为了确保这些类型的相同性,类型推断求助于一阶统一。统一
(a , b) -> a
(a , b) -> b
[b +-> a] -- means substitute occurrences of b for a
(a,a) -> a
关于Haskell 为什么是 [fst,snd]::[(a,a) -> a],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35576239/
我是一名优秀的程序员,十分优秀!