scala - 猫 : how to find the specific type from implicits

标签 scala scala-cats

我有这段代码可以编译并且工作正常

import cats.implicits._
Cartesian[ValidResponse].product(
    getName(map).toValidated,
    readAge(map).toValidated
).map(User.tupled)

但是我不喜欢 cats.implicits._ 的导入因为那里的类(class)太多了。我尝试导入与笛卡尔函数相关的特定内容,例如
import cats.implicits.catsSyntaxCartesian
import cats.implicits.catsSyntaxUCartesian
import cats.implicits.catsSyntaxTuple2Cartesian

但这些都不起作用。作为一个新手,我发现隐式导入非常令人困惑,因为它们只有 1000 个并且名称不是很明显。我唯一的选择是通过 import cats.implicits._ 导入整个 Universe并停止思考它。

事实上,我对 cats.implicits 有更广泛的困惑。 , cats.instances._cats.syntax._ .到目前为止,我只是通过反复试验导入这些。我不确定何时导入什么。

最佳答案

不要试图从 cats.implicits 中挑出具体的东西.您要么导入整个内容,要么根本不使用它。此外,没有理由害怕全部导入。它不能干涉任何事情。

好吧,我撒谎了。如果你导入 cats.instances.<x>._ 会干扰和/或 cats.syntax.<x>._旁边 cats.implicits._ .这些组是相互排斥的:您要么导入所有内容,然后使用 cats.implicits._ 忘记它。 ,或者您专门选择要使用 cats.instances 导入的内容和 cats.syntax .

这两个包并不意味着像 cats.implicits 那样完全导入.相反,they include a bunch of objects .每个对象都包含一些隐式实例/语法,您应该从中导入。

import cats.implicits._ // Good, nothing to fear
// RESET IMPORTS
import cats.implicits.catsSyntaxCartesian // Bad, don't pick and choose
// RESET IMPORTS
import cats.instances._ // Bad, is useless
import cats.syntax._    // Ditto
// RESET IMPORTS
import cats.instances.list._   // ok
import cats.syntax.cartesian._ // ok
// RESET IMPORTS
import cats.implicits._
import cats.syntax.monad._ // Bad, don't mix these two

另外每个cats.{ instances, syntax }包含 all对象,具有明显的功能。进口cats.implicits._真的是import cats.syntax.all._, cats.instances.all._的捷径.

关于scala - 猫 : how to find the specific type from implicits,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41412040/

相关文章:

scala - 使用spark-csv写入单个CSV文件

postgresql - 使用 Slick 进行多重 OR 过滤

Scala, ZIO - 将 Future 转换为 ZIO 或 ZIO 转换为 Future。可能吗?

scala - Cats Seq[Xor[A,B]] => Xor[A, Seq[B]]

scala - 如何定义在免费应用程序中使用的递归代数?

scala - 在 Scala 中的 Free Monad 中堆叠 Monadic 效果

scala - 带有 * (varargs) 参数的案例类的模式匹配

scala - 带有对象键的记录的 Circe 通用编解码器推导

Scala-使用foreach将列表写入文件

Scala Cats 将值提升到 Monad Transformers 中