kos*_*tja 5 scala implicit traits scala-cats
和猫一起玩,我注意到了一些我无法解释的行为:
import cats.implicits._
...
def wrapA[A, F[_]](v: A)(implicit F: Applicative[F]): F[A] = F.pure(v)
Run Code Online (Sandbox Code Playgroud)
不是一个特别有用的方法,只是玩耍.
完全参数化方法或传递所需的实例显然工作正常:
val o: Option[Int] = wrapA[Int, Option](1)
val o: Option[Int] = wrapA(1)(catsStdInstancesForOption)
Run Code Online (Sandbox Code Playgroud)
这不是类型检查:
val o: Option[Int] = wrapA(1) // found scala.util.Try[Int], required Option[Int]
Run Code Online (Sandbox Code Playgroud)
好的,TryInstances在之前解决了OptionInstances
trait AllInstances
...
with OptionInstances
...
with TryInstances
with TupleInstances
...
Run Code Online (Sandbox Code Playgroud)
但那么为什么没有Tuple2预料到Try呢?在TupleInstances解决之前TryInstances并定义Applicative实例.是arity吗?实例的顺序是否有特殊原因?虽然我看到值类型不会影响隐式解析,但为什么不呢?
Cats 0.9.0,Scala 2.12.1
谢谢.
编辑似乎没有任何Applicative实例Tuple2,因此没有pure,所以这部分问题似乎已经解决了.
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |