Я провел несколько экспериментов с котятами (https://github.com/milessabin/kittens) и у меня возникли проблемы с компиляция моего кода. Я получаю следующую ошибку.
[error] ...danirey\scala\kittens\Kittens.scala:23: could not find implicit value for parameter instance: cats.Functor[danirey.scala.kittens.AdtDefns.Tree]
[error] val funct = Functor[Tree]
[error] ^
[error] one error found
[error] (compile:compileIncremental) Compilation failed
Полный файл выглядит следующим образом
package danirey.scala.kittens
/**
* @author Dani
*/
import cats.Functor
import cats.syntax.AllSyntax
import cats.derived.functor._
import legacy._
import cats.derived.iterable.legacy._
import org.typelevel.discipline.scalatest.Discipline
import shapeless.cachedImplicit
object Kittens extends App {
val ft = new FunctorExperiment()
ft.print()
}
class FunctorExperiment extends AllSyntax {
import AdtDefns._
def print():Unit = {
val funct = Functor[Tree]
val tree: Tree[String] = Node(
Leaf("Reto"),
Node(
Leaf("Sandra"),
Leaf("Mike")
)
)
println(funct.map(tree)(_.length))
}
}
Я использую почти идентичный код в ScalaTest, который компилируется без каких-либо проблем.
package danirey.scala.kittens
import cats.Functor
import cats.syntax.AllSyntax
import cats.derived.functor._
import legacy._
import cats.derived.iterable.legacy._
import org.scalatest.FunSuite
import org.typelevel.discipline.scalatest.Discipline
import shapeless.cachedImplicit
/**
* @author Dani
*/
class FunctorExperimentTest extends FunSuite with Discipline with AllSyntax {
import AdtDefns._
test("functors experiment") {
val funct = Functor[Tree]
val tree: Tree[String] = Node(
Leaf("Reto"),
Node(
Leaf("Sandra"),
Leaf("Mike")
)
)
println(funct.map(tree)(_.length))
}
}
Мой build.sbt выглядит следующим образом name: = "shapeless-sessions"
version := "1.0-SNAPSHOT"
scalaVersion := "2.11.8"
exportJars := true
libraryDependencies ++= Seq(
"com.chuusai" % "shapeless_2.11" % "2.3.0",
"org.typelevel" % "kittens_2.11" % "1.0.0-M2",
"org.scalatest" %% "scalatest" % "3.0.0-M7" % "test"
)
scalacOptions ++= Seq(
"-feature",
"-language:higherKinds",
"-language:implicitConversions",
"-unchecked"
)
Самое интересное, что он компилируется как часть инкрементальной компиляции.
Если я прокомментирую строки с номерами 16, 23 и 32, затем выполню «sbt compile», затем снова удаляю комментарии и выполняю «sbt compile / package», который он компилирует, и я даже могу выполнить программу. Но как только я запускаю "sbt clean", он больше не компилируется.
Объект AdtDefns по сути является копией https://github.com/milessabin/kittens/blob/master/core/src/test/scala/cats/dehibited/adtdefns.scala Соответствующая часть
object AdtDefns {
sealed trait Tree[T]
final case class Leaf[T](t: T) extends Tree[T]
final case class Node[T](l: Tree[T], r: Tree[T]) extends Tree[T]
}
PS: Было бы неплохо, если бы кто-нибудь мог создать тег для scala-котят
import cats.derived.functor._
, попробуйтеimport cats.derived.MkFunctor._
напрямую. - person KailuoWang   schedule 04.05.2016