我有这个编译并且工作正常的代码
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.implicits
和cats.instances._
抱有更广泛的疑惑。到目前为止,我只是通过反复试验导入这些。我不确定何时导入什么。
答案 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;可以通过包名轻松区分:
cats._
- 这是大多数类型生活的地方(例如Monad,Foldable等)cats.data._
- 这是Validated和State等数据结构的基地。cats.instances._
- 这是1中定义的类型类的实例。例如,如果您导入cats.instances.list._
,则会将标准列表的Show,Monad等实例纳入范围。 这是您最感兴趣的。cats.syntax._
- 有一些语法丰富,使代码更易于编写和阅读。使用cats.syntax._
的一个例子是:
import cats.Applicative
import cats.syntax.applicative._
val listOfInt = 5.pure[List]
//instead of
val otherList = Applicative[List[Int]].pure(5)