有人可以解释contramap
给我吗? 将这种实现是什么样的? 将使用的很好的例子是什么样的?
// contravariant functor
trait Contravariant[F[_]] {
def contramap[A, B](f: B => A): F[A] => F[B]
}
来源: http://tmorris.net/posts/functors-and-things-using-scala/index.html
有人可以解释contramap
给我吗? 将这种实现是什么样的? 将使用的很好的例子是什么样的?
// contravariant functor
trait Contravariant[F[_]] {
def contramap[A, B](f: B => A): F[A] => F[B]
}
来源: http://tmorris.net/posts/functors-and-things-using-scala/index.html
如果你看看下面的Ordering.on
标准库的方法:
def on[U](f: U => T): Ordering[U]
你会看到, on
转换的Ordering[T]
为Ordering[U]
在拍摄功能从U
到T
。 因此,该方法on
证人的事实, Ordering
可以被看作是一个Contravariant
与仿函数:
def contramap[A, B](f: B => A) = (fa: Ordering[A]) => fa.on(f)
我也看到了托尼的博客文章和它帮助我终于使得这个三岁的感觉答案从返璞词我的问题之一。
假设有一类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) )
}
}