5

在和猫玩耍时,我注意到了一种我无法完全解释的行为:

import cats.implicits._
...
def wrapA[A, F[_]](v: A)(implicit F: Applicative[F]): F[A] = F.pure(v)

不是特别有用的方法,随便玩玩。

在完全参数化方法或显式传递所需实例时可以正常工作:

val o: Option[Int] = wrapA[Int, Option](1)
val o: Option[Int] = wrapA(1)(catsStdInstancesForOption)

这不进行类型检查:

val o: Option[Int] = wrapA(1) // found scala.util.Try[Int], required Option[Int]

好的,TryInstances在解决之前OptionInstances

trait AllInstances
  ...
  with    OptionInstances
  ...
  with    TryInstances
  with    TupleInstances
  ...

但是,为什么不Tuple2期望而不是Try?之前已TupleInstances解决TryInstances并定义一个Applicative实例。是arity吗?实例的顺序是否有特殊原因?虽然我看到值类型不会影响隐式解析,但为什么不影响呢?

猫 0.9.0,斯卡拉 2.12.1

谢谢你。

编辑毕竟似乎没有Applicative实例,因此没有,所以这部分问题似乎已经解决。Tuple2pure

4

0 回答 0