Während dieses Problem in Code mit shapeless und kind-projector gefangen wurde, konnte dieses Verhalten ohne sie reproduziert werden.Implizite nicht gefunden für teilweise angewendet Typ
Angenommen, ich habe eine einfache Typklasse zum Korrigieren von Typklasseninstanzen mit unvollständiger Implementierung (Mirror of LiftAll
).
sealed trait LiftAll1[F[_], In] {
type Out
def instances: Out
}
object LiftAll1 {
type Aux[F[_], In0, Out0] = LiftAll1[F, In0] {type Out = Out0}
implicit def unit[F[_]]: Aux[F, Unit, Unit] = new LiftAll1[F, Unit] {
type Out = Unit
def instances = Unit
}
}
Und einige sehr einfache Art Klasse testen
sealed class FirstIs[M, T]
object FirstIs {
implicit def firstIs[M, D]: FirstIs[M, (M, D)] = new FirstIs
}
Dinge in Ordnung sind, wenn ich FirstIs
teilweise über alias anwenden werde versuchen und erhalten Instanz über LiftAll1
type FirstIsInt[D] = FirstIs[Int, D]
implicitly[LiftAll1[FirstIsInt, Unit]]
Aber eine Inline-Teilaussteuerung führt zu einem Kompilierungsfehler
implicitly[LiftAll1[({type lambda[x] = FirstIs[Int, x]})#lambda, Unit]]
//Error: could not find implicit value for parameter e: LiftAll1[[x]FirstIs[Int,x],Unit]
Wie konnten in solchen Situationen teilweise angewandte Typklassen gefunden werden?
Verwenden Sie '-Ypartial-unification' auf 2.12 oder 2.11 typelevel scala? – Reactormonk
@Reactormonk Irgendwie habe ich vergessen, diese Option in diesem Projekt hinzuzufügen. Vielen Dank. Das Problem ist gelöst. – Odomontois
@Odomontois sollten Sie die Frage beantworten und sie richtig markieren ... es ist vollkommen akzeptabel, Ihre eigenen Fragen zu SO zu beantworten. –