この 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 は、IC2 または IC5 ではなく、暗黙のクラス IC1 または IC3 または IC4 によって解析される必要があります
--
T パラメータを動的に定義するために、「フィルタ」で構成される HList を使用します。必要な HList が作成されたら、HList コンポーネントを集約して、暗黙的なクラスの解析可能なフィルターを生成する必要があります。
だから私は例えば必要です:
IC1FIlter :: IC3Filter :: IC4Filter :: HNil
に変換されます
IC1Filter with IC3Filter with IC4Filter with Any