3

我想用这个 Monad 折叠一个 HList 但在类型级别

trait TypeMonad{

  type Append[A,B] = A with B

  type Identity = Any
}

因此, HList : "A :: B:: C :: HNil " 将给出类型 " A with B with C with Any"

如果我实现了 HList 很容易做到:

sealed trait HList {
  type Fuse
}
final trait HCons[H,L<:HList] extends HList {
  type Fuse = H with L#Fuse
}
final trait HNil extends Hlist {
  type Fuse = Any
}

但是我不知道如何在无形环境中使用此功能

我的用例如下:

我需要通过约束有效参数来限制对某些类的隐式类使用例如:

trait Filter
trait IC1Filter extends Filter
trait IC2Filter extends Filter
(...)
implicit class IC1[T <: IC1Filter](val v : MyPrettyClass[T]){...}
implicit class IC2[T <: IC2Filter](val v : MyPrettyClass[T]){...}
(...)

例如,如果我有

class MC extends MyClass[IC1Filter with IC3Filter with IC4Filter with Any]

MC 必须由隐式类 IC1 或 IC3 或 IC4 解析,但不能由 IC2 或 IC5 解析

--

我使用由“过滤器”组成的 HList 来动态定义 T 参数。创建所需的 HList 时,我需要聚合 HList 组件以便为隐式类生成可解析的过滤器

所以我需要例如:

 IC1FIlter :: IC3Filter :: IC4Filter :: HNil

被转化为

 IC1Filter with IC3Filter with IC4Filter with Any
4

0 回答 0