猫:如何从implicits中找到特定类型

时间:2016-12-31 22:12:39

标签: scala scala-cats

我有这个编译并且工作正常的代码

curl -X POST -H "Content-Type: application/json" -d '{"setting_type":"greeting", "greeting":{"text":"Hi {{user_first_name}}! I am a bot. Simply say \u0027Hi\u0027 to start.. yes, it\u0027s as simple as that!"}}' "https://graph.facebook.com/v2.6/me/thread_settings?access_token=EAAFXmrm6M8cBAHF2TwfWMnQfksHnZBtQQIHYWjIFpmTffkG"  

但是我不喜欢import cats.implicits._ Cartesian[ValidResponse].product( getName(map).toValidated, readAge(map).toValidated ).map(User.tupled) 的导入,因为那里的课程太多了。我尝试导入与笛卡尔相关的特定内容,如

cats.implicits._

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

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

2 个答案:

答案 0 :(得分:7)

请勿尝试从table { width: 100%; } 中挑选具体内容。您可以导入整个内容,也可以根本不使用它。此外,没有理由害怕将其全部导入。它不会干扰任何事情。

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

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

cats.implicits

此外,每个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._的快捷方式。

答案 1 :(得分:2)

我首先要说import cats.implicits._是安全,合理的,并且在启动时是推荐的方法。因此,如果这个问题的唯一原因是你不喜欢导入太多的课程,那么我认为你应该只是按照那样的假设来咬掉那些。

此外,我建议你看看官方猫import guide。它试图解释猫代码的包/逻辑结构,并可能使它更容易理解。

&#34;猫&#34;图书馆分布在几个&#34;区域&#34;可以通过包名轻松区分:

  1. cats._ - 这是大多数类型生活的地方(例如Monad,Foldable等)
  2. cats.data._ - 这是Validated和State等数据结构的基地。
  3. cats.instances._ - 这是1中定义的类型类的实例。例如,如果您导入cats.instances.list._,则会将标准列表的Show,Monad等实例纳入范围。 这是您最感兴趣的
  4. cats.syntax._ - 有一些语法丰富,使代码更易于编写和阅读。
  5. 使用cats.syntax._的一个例子是:

    import cats.Applicative
    import cats.syntax.applicative._
    
    val listOfInt = 5.pure[List]
    //instead of 
    val otherList = Applicative[List[Int]].pure(5)