【发布时间】:2019-09-03 17:54:11
【问题描述】:
我正在尝试从两个具有不同类型和不同顺序的不同字段的案例类创建一个自动适配器。 它有时会起作用。调试并知道哪些隐式无法解决是非常困难的。 当编译器找不到特定的适配器时,我必须开始测试每个所需的隐式并检查哪个失败以及原因。有没有办法标记为什么给定的隐式方法是候选方法并且在尝试解决嵌套隐式时不再存在?
对不起,如果这听起来令人困惑!
private implicit def fromRecordAdapter
[
Source, SourceFields <: HList, SourceRecord <: HList, Target, TargetFields <: HList, TargetRecord <: HList,
SelectedFields <: HList, AddedFields <: HList,
SourceTakenProduct <: HList, TargetProduct <: HList, CommonRecord <: HList, AddedProduct <: HList,
AddedRecord <: HList, UnorderedRecord <: HList
](
implicit
sourceRecord: LabelledGeneric.Aux[Source, SourceRecord]
, sourceFields: Keys.Aux[SourceRecord, SourceFields]
, targetRecord: LabelledGeneric.Aux[Target, TargetRecord]
, recordFields: Keys.Aux[TargetRecord, TargetFields]
, selectedFields: hlist.Intersection.Aux[SourceFields, TargetFields, SelectedFields]
, addedFields: hlist.Diff.Aux[TargetFields, SelectedFields, AddedFields]
, sourceTakenProduct: SelectAll.Aux[SourceRecord, SelectedFields, SourceTakenProduct]
, targetProduct: SelectAll.Aux[TargetRecord, SelectedFields, TargetProduct]
, addedProduct: SelectAll.Aux[TargetRecord, AddedFields, AddedProduct]
, sourceToTargetMapper: TypeMapper[TargetProduct, SourceTakenProduct]
, addedProductDefault: Lazy[DefaultValue[AddedProduct]]
, commonRecord: ZipWithKeys.Aux[SelectedFields, TargetProduct, CommonRecord]
, addedTagger: ZipWithKeys.Aux[AddedFields, AddedProduct, AddedRecord]
, prepend: Prepend.Aux[CommonRecord, AddedRecord, UnorderedRecord]
, align: hlist.Align[UnorderedRecord, TargetRecord]
): Adapter[Source, Target] = ...
换句话说,我很想知道那个长列表中的哪个参数,编译器停下来说,例如:“该死,sourceToTargetMapper:TypeMapper[TargetProduct, SourceTakenProduct] 没有隐含”
这样我就知道从哪里开始检查了
【问题讨论】:
-
也许尝试使用splain?
标签: scala logging implicit shapeless