2
假設我有容器標記奇怪影響
case class TypedString[T](value: String)
和局部功能特技
abstract class PartFunc[Actual <: HList] {
val poly: Poly
def apply[L1 <: HList](l: L1)(implicit
mapped: Mapped.Aux[Actual, TypedString, L1],
mapper: Mapper[poly.type, L1]): L1 = l
}
聚對映射器
object f extends (TypedString ~>> String) {
def apply[T](s : TypedString[T]) = s.value
}
和結果的方法
用法例子:
func[
Int :: String :: HNil
](TypedString[Int]("42") :: TypedString[String]("hello") :: HNil)
這段代碼在編譯時失敗,因爲編譯器無法找到Mapped
隱含參數:
could not find implicit value for parameter mapped:
shapeless.ops.hlist.Mapped[shapeless.::[Int,shapeless.::[String,shapeless.HNil]],nottogether.MapperTest.TypedString]{type Out = shapeless.::[nottogether.MapperTest.TypedString[Int],shapeless.::[nottogether.MapperTest.TypedString[String],shapeless.HNil]]}
](TypedString[Int]("42") :: TypedString[String]("hello") :: HNil)
但是,如果我們從PartFunc.apply(...)
簽名刪除Mapper
隱含參數一切工作正常。所以我不知道爲什麼以及如何Mapper
影響Mapped
。
我問這個問題在沒有回答的無形迴音室裏。感謝您的支持。 您建議閱讀哪些書或文章以更熟悉scala類型? –