Я пишу комбинатор, который принимает HList
из Option[A] :: Option[AA] :: Option[AAA]...
и т. Д.
Также принимает функцию f
типа A,AA, AAA,... => U
. И это возвращает U
. Как мне кодировать сигнатуру типа для моего комбинатора? Я должен предположить, что мои A, AA, AAA
также являются моноидами, поэтому, если мои параметры None
, я могу вызвать моноидный ноль для создания значений для f
. Я новичок в бесформенном, так что спасибо!
Это то, что я имею до сих пор, но мне не хватает многих ограничений.
- Каждый элемент
H
является Option[A], Option[AA], ...
A, AA, AAA
все моноиды.
-
HList
D - это просто
такой же как H
без опции.
def combinator[H <: HList, D <: HList, U](in: H, f : D => U) : U =
f(in map {
case None : Option[A] => implicitly[Monoid[A]].zero
case Some(v) => v
})