类型lambdas打破隐式解析

时间:2018-12-07 23:49:51

标签: scala shapeless type-level-computation kind-projector

有人可以解释这种现象并提供解决方法吗? Scala 2.12.7,实物投影仪0.9.8,scalacOptions + =“ -Ypartial-unification”

package tictactoe

import shapeless.{::, HList, HNil}
import tictactoe.ListOps.HasF

sealed trait LowPrio {
  implicit def ifTail[F[_], H, X <: HList](implicit ev: HasF[F, X]): HasF[F, H :: X] = null
}

object ListOps extends LowPrio {

  //Checks that property F[A] holds for at least one element of X
  sealed trait HasF[F[_], X <: HList]

  implicit def ifhead[F[_], H, X <: HList](implicit ev: F[H]): HasF[F, H :: X] = null
}

object Runner {
  type IsString[A] = =:=[A, String]

  //Works
  implicitly[HasF[IsString, String :: Int :: HNil]]

  /*
  Doesn't work
  could not find implicit value for parameter e: tictactoe.ListOps.HasF[[A]A =:= String,String :: Int :: shapeless.HNil]
  implicitly[HasF[Lambda[A => =:=[A, String]], String :: Int :: HNil]]
   */
  implicitly[HasF[Lambda[A => =:=[A, String]], String :: Int :: HNil]]

  /*
  Doesn't work
  could not find implicit value for parameter e: tictactoe.ListOps.HasF[[α$0$]α$0$ =:= String,String :: Int :: shapeless.HNil]
  implicitly[HasF[=:=[?, String], String :: Int :: HNil]]
   */
  implicitly[HasF[=:=[?, String], String :: Int :: HNil]]
}

0 个答案:

没有答案