作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这种类型让我大吃一惊:
class Contravariant (f :: * -> *) where
contramap :: (a -> b) -> f b -> f a
最佳答案
我知道这个答案不会像其他答案那样学术性很强,但它只是基于你会遇到的逆变的常见实现。
首先,提示:不要阅读 contraMap
f
使用相同的心理隐喻的函数类型正如你在阅读优秀的 ol' Functor 的 map
时所做的那样.
你知道你是怎么想的:
"a thing that contains (or produces) an
t
"
f t
之类的类型时?
f a
在
contraMap
,你应该想到“双重”的比喻:
f t
is a thing that CONSUMES at
contraMap
的类型应该开始有意义:
contraMap :: (a -> b) -> f b ...
b
的函数. b
的东西. b
.第二个参数吃掉
b
.
contraMap :: (a -> b) -> f b -> f a
a
的消费者”。
a
的函数。作为输入。
(a -> b)
应该是构建“
a
的消费者”的良好构建 block 。
contraMap
基本上可以让您创建一个新的“消费者”,如下所示(警告:输入符号):
(takes a as input / produces b as output) ~~> (consumer of b)
contraMap
的第一个参数(即 (a -> b)
)。 f b
)。 contraMap
的最终输出(知道如何使用 a
的东西,即 f a
)。 关于haskell - 什么是逆变仿函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38034077/
COW 不是奶牛,是 Copy-On-Write 的缩写,这是一种是复制但也不完全是复制的技术。 一般来说复制就是创建出完全相同的两份,两份是独立的: 但是,有的时候复制这件事没多大必要
我是一名优秀的程序员,十分优秀!