在和猫玩耍时,我注意到了一种我无法完全解释的行为:
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
实例,因此没有,所以这部分问题似乎已经解决。Tuple2
pure