2

我开始为 Sized 添加一个 safeGet 方法,因为我觉得这对于我正在处理的某些客户端代码来说是最好的。

我能够让它与一个在我的情况下有效但在一般情况下无效的可怕黑客一起工作。

这是方法签名和定义:

def safeGet(m : Nat)(implicit diff : Diff[L, Succ[m.N]], ev : ToInt[m.N]) = r(toInt[m.N])

但是,由于 Traversable 没有定义 apply 方法,因此必须执行一些额外的 hack 才能使其正常工作。这是完整的(小)差异:https ://github.com/jedesah/shapeless/commit/ab52185bec7463f54a040e7857cba7c5758fe46e

任何人都知道如何以更合适的方式获得相同的结果?

我觉得标准库中必须有一个 IsGenSeqLike 才能正确完成。然后我可以不理会 Traversable,只在 Seq 上定义 safeGet。

4

0 回答 0