Scala 解释对比图
谁能给我解释一下Scala 解释对比图,scala,Scala,谁能给我解释一下contracmap?这个实现是什么样子的?好的用法示例是什么样的 // contravariant functor trait Contravariant[F[_]] { def contramap[A, B](f: B => A): F[A] => F[B] } 来源:如果您查看标准库的以下方法: def on[U](f: U => T): Ordering[U] 您将看到,上的将排序[T]转换为排序[U],同时将函数从U转换为T。因此上的方法见证了
contracmap
?这个实现是什么样子的?好的用法示例是什么样的
// contravariant functor
trait Contravariant[F[_]] {
def contramap[A, B](f: B => A): F[A] => F[B]
}
来源:如果您查看标准库的以下方法:
def on[U](f: U => T): Ordering[U]
您将看到,上的将排序[T]
转换为排序[U]
,同时将函数从U
转换为T
。因此
上的方法见证了这样一个事实,即排序
可以被视为一个逆变
函子,具有:
def contramap[A, B](f: B => A) = (fa: Ordering[A]) => fa.on(f)
我还看到了Tony的博客文章,它帮助我最终理解了这个三岁的孩子从我的问题中的一个 假设您有一个类Conversion[X,Y]
表示从X
类型的值到Y
类型的值的转换。您可以将其与函数?=>X
对输入进行预处理,或使用函数Y=>?
对输出进行后处理。例如:
trait Conversion[X, Y] { self =>
def apply(x: X): Y
def map[Z](f: Y => Z) = new Conversion[X, Z] {
def apply(x: X): Z = f(self.apply(x))
}
def contramap[W](f: W => X) = new Conversion[W, Y] {
def apply(w: W): Y = self.apply(f(w))
}
}
你的意思是“从X
类型的值到Y
类型的值”吗?@huynhjl谢谢。我修正了打字错误。