誰か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
typeの値Conversion[X, Y]
から type の値への変換を表すクラスがあるとします。入力を前処理する関数または出力を後処理する関数と組み合わせることができます。例えば: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))
}
}
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)
また、Tony からのブログ投稿も見ました。この 3 年前のレトロニムから私の質問への 回答をようやく理解するのに役立ちました。