【发布时间】:2021-02-13 18:27:11
【问题描述】:
有没有办法将自然变换(例如 Option ~> Either[String, *])映射到 KList(例如 HList 和 UnaryTCConstraint)上?这对 KList 来说似乎是很自然的事情。
具体来说,我正在尝试执行以下操作:
object myNaturalTransformation extends (Option ~> Either[String, *]) {
def apply[T](a: Option[T]): Either[String, T] = a.toRight("oh noe!")
}
def doStuff[KList <: HList: *->*[Option]#λ](klist: KList) = {
klist.map(myNaturalTransformation)
}
我知道缺少的部分是执行.map 所需的Mapper,而Shapeless 无法从myNaturalTransformations 案例和UnaryTCConstraint 中生成一个。是否有可能通过其他方式获得?或者是否有另一种方法来映射我忽略的 KList(除了将 Mapper 传递给 doStuff 函数)?
我能够编写我自己的UnaryTCConstraint 版本,其中包含一个
def mapper[G[_], HF <: ~>[TC, G]](hf: HF): Mapper[hf.type, L]
为给定的自然变换显式生成映射器。但是我很好奇是否可以通过 Shapeless 的 UnaryTCConstraint 实现来做到这一点。
【问题讨论】:
标签: scala typeclass implicit shapeless context-bound