【发布时间】:2014-11-19 22:11:15
【问题描述】:
根据this question,Spray 使用 sbt-boilerplate 生成ApplyConverter 实例,这些实例隐式地将A :: B :: ... :: HNil => R 转换为更传统的(A, B, ...) => R,以便于使用。这个问题是一年多前提出的;现在可以使用例如宏或 Shapeless 的新功能来完成此操作,从而不需要外部代码生成步骤吗?
【问题讨论】:
-
IMO 样板应该是无形的一部分。我在邮件中once asked a similar question,但没有跟进。因此,如果您需要该功能,再次询问可能是有意义的。
-
我很困惑......这几乎从一开始就是 shapeless 的一部分......我错过了什么?
-
@MilesSabin 首先让我感谢 shapeless 以及您为它所做的所有工作,我认为它是一个很棒的 Scala 库!但是我想知道如果没有“外部代码生成”是否可能一种不依赖于每个
FunctionN的单独实例的方法。据我所知,shapeless 仍在使用模板生成其 FnFromProduct 实例。 -
我想这取决于您所说的“外部代码生成”是什么意思。作为 shapeless 的用户,您不必求助于任何形式的代码生成。代码生成在内部用于无形,当然,镜像 Scala 标准库和编译器中的代码生成......鉴于当前定义 Scala 函数类型的方式(即完全不相关),这是不可避免的。解决这个问题的明智方法是假设 Scala 变体将 curried 函数类型作为主要类型......但我认为这可能不会很快发生。
-
所以我想我在问两个不同的问题:第一,这是否可能与 shapeless 一起使用,答案是肯定的,但第二,这在 vanilla Scala 中是否可能没有代码重复,答案是否定的。我认为 Miles 的回答更直接地回答了我的问题,所以我将其作为答案,但我也不认为 lmm 的回答是错误的。
标签: scala macros spray shapeless hlist