和猫一起玩,我注意到了一些我无法解释的行为:
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吗?实例的顺序是否有特殊原因?虽然我看到值类型不影响隐式解析,但为什么不呢?
Cats 0.9.0,Scala 2.12.1
谢谢。
编辑毕竟Applicative
似乎没有Tuple2
个实例,因此没有pure
,所以这部分问题似乎已经解决了。