2016-11-17 130 views
1

我有以下代碼,我從這裏得到:http://underscore.io/blog/posts/2015/06/10/an-introduction-to-cats.html貓無法解析符號| @ |

import cats.data.Xor 
import cats.data.{Validated, Xor} 
import cats.syntax.apply._ // For |@| syntax 
import cats.std.list._ 
val v1: ValidatedR = valid(1) 
val v2: ValidatedR = invalid(List("Accumulates this")) 
val v3: ValidatedR = invalid(List("And this")) 
(v1 |@| v2 |@| v3) map { _ + _ + _ } 

但是,我越來越:

Cannot resolve symbol |@| 

build.sbt

val snapshots = "Sonatype Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots" 

val algebraVersion = "0.2.0-SNAPSHOT" 
val catsVersion = "0.1.0-SNAPSHOT" 

val algebra = "org.spire-math" %% "algebra" % algebraVersion 
val algebraStd = "org.spire-math" %% "algebra-std" % algebraVersion 

val cats  = "org.spire-math" %% "cats-core" % catsVersion 
val catsStd = "org.spire-math" %% "cats-std" % catsVersion 

scalaVersion := "2.11.6" 

libraryDependencies ++= 
    Seq(
    algebra, algebraStd, 
    cats, catsStd 
) 

resolvers += snapshots 

還有什麼,我應該是進口或者使用?

+0

導入現在是'cats.syntax.cartesian._','List'實例現在可以通過'cats.instances.list._'導入。可能最簡單的方法是使用'import cats.implicits._'。 –

+0

當導入'cats.syntax.cartesian._'時,我得到'錯誤:(2,22)對象笛卡兒不是包cats.syntax'的成員 ^ – octavian

+0

您是否正在使用文章中提到的貓版本? –

回答

5

這個例子有點過時了。從那時起,一些事情發生了改變:

  • |@|現在由Cartesian型類提供相比前作Apply類型的類。
  • 來自Scala標準庫的Option,List等類型的輸入已從cats.std.xxx更名爲cats.instances.xxx
  • 最新版本的Cats不再具有Xor數據類型,而是使用scala.util.Either數據類型。

就像我在我的評論中提到的那樣,使用「超級」導入cats.implicits._更容易。

對於一些相似(和最新)的示例,您可以查看ValidatedEither的Cats文檔。

+1

請注意:批量導入implicits更容易,但可以使編譯更加昂貴。精確輸入implicits通常是可取的。 –

+0

你有一點@GabrielePetronella,但你不認爲他們是一個更先進的,而不是初學者友好(導致這樣的問題)? Cats文檔也嘗試在任何地方使用「超級」導入,請參見[#1026](https://github.com/typelevel/cats/issues/1026)。 –

+0

是的,我同意。我的觀點是:超級進口的成本可能並不明顯,因此可能值得一提m –