小编mir*_*orn的帖子

使用未知类型折叠HList

我有一种复杂的类型层次结构,但要分解它有两个基本特征:Convertable并且Conversion[A <: Convertable, B <: Convertable,例如,有一个转换可以将Mealy-automaton转换为Moore-automaton.每个人Conversion[A,B]都有一个convert(automaton: A) : B方法.

现在我想介绍智能转换的概念,它基本上是一个普通转换列表,将一个接一个地执行.因此,我引入了一个AutoConversion特性,扩展了一个转换,它有一个val path : HList参数来表示转换链,并且应该实现该convert方法,以便AutoConversions只需要提供要采取的实际转换列表.我想你可以用一个实现此foldpath,所以这是我第一次尝试:

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)

scala shapeless

6
推荐指数
1
解决办法
361
查看次数

标签 统计

scala ×1

shapeless ×1