我有一种复杂的类型层次结构,但要分解它有两个基本特征:Convertable并且Conversion[A <: Convertable, B <: Convertable,例如,有一个转换可以将Mealy-automaton转换为Moore-automaton.每个人Conversion[A,B]都有一个convert(automaton: A) : B方法.
现在我想介绍智能转换的概念,它基本上是一个普通转换列表,将一个接一个地执行.因此,我引入了一个AutoConversion特性,扩展了一个转换,它有一个val path : HList参数来表示转换链,并且应该实现该convert方法,以便AutoConversions只需要提供要采取的实际转换列表.我想你可以用一个实现此fold过path,所以这是我第一次尝试:
package de.uni_luebeck.isp.conversions
import shapeless._
import shapeless.ops.hlist.LeftFolder
trait AutoConversion[A <: Convertable, B <: Convertable] extends Conversion[A, B] {
val path: HList
object combiner extends Poly {
implicit def doSmth[C <: Convertable, D <: Convertable] =
use((conv : Conversion[C, D] , automaton : C) => conv.convert(automaton))
Run Code Online (Sandbox Code Playgroud)
}
override def …Run Code Online (Sandbox Code Playgroud)