2016-05-01 1 views
3

私はKittens(https://github.com/milessabin/kittens)でいくつかの実験を行い、コードをコンパイルする際に問題があります。次のエラーが表示されます。私は何の問題もなくコンパイルScalaTestでほとんど同じコードを使用していFunctorがパラメータインスタンスの暗黙の値を逃しています(sbt clean後のみ)

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)) 
    } 
} 

を次のように

[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 

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 の名前は次のようになります:=「型崩れ-実験」

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/derived/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:誰かが私たちが子猫を使用

+0

私のどこかにコンパイラのバグのようです。 私の最初の反応は、 'import cats.derived.functor._'の代わりにexport hookを除外しようとしています。' import cats.derived.MkFunctor._'を直接試してみてください。 – KailuoWang

+0

1.0.0-M3(PRレビュー待ち)は、スカラー2.11.8(SI-2712修正プラグイン付き)に更新され、影響が出るかどうかは不明ですが、これがコンパイラのバグであれば... – KailuoWang

+0

ヒントのために@ KailuoWangに感謝します。残念ながら、それは問題を解決しませんでした。 私は1.0.0-M3を待ってからSI-2712と一緒に再試行します SI-2712で発生しないコンパイラのバグを修正するのに誰も興味がないと思います。 – DaniRey

答えて

0

@DaniRey Scalaの-子猫のためのタグを作成することができればいいだろう私たちのプロジェクトはシーケンス部分だけです。私は子猫の派生を使用するプロジェクトは認識していません。あなたのユーザーのケースは何ですか?

+0

具体的な使用例はありません。私は新しい概念を学び理解することを熱望しています。 – DaniRey

+0

@DaniRey私はそれが 'App'のdelayedInitで何かを持つかもしれないと思っていましたが、わかりません。実際のコードでこれを使用したい場合は、暗黙の派生インスタンスをコンパニオンオブジェクトに追加することができます。 – KailuoWang

+0

遅く返事を申し訳ありません。私は、 'App'を拡張するのではなく、' main'関数でクラスを使うようにコードを変更しましたが、残念ながら何も変更されませんでした。 暗黙の派生インスタンスについて。申し訳ありませんが、私は何をすべきか分かりません。 FunctorExperiment用のコンパニオンオブジェクトを作成することをお勧めしますか?しかし、暗黙的な派生インスタンスを追加するとどうなりますか? – DaniRey

関連する問題