Я могу написать простые рекурсивные полиморфные функции:Как я могу написать рекурсивную функцию полиморфной с бесформенными
object simpleRec extends Poly1 {
implicit def caseInt = at[Int](identity)
implicit def caseList[A, B](implicit ev: simpleRec.Case.Aux[A, B]) =
at[List[A]](_.headOption.map(simpleRec))
}
Это, кажется, в значительной степени сделать то, что я хочу; Однако, я, кажется, становится бессмысленным тип результата:
scala> simpleRec(List.empty[List[Int]])
res3: Option[B] = None
scala> simpleRec(List(List(1)))
res4: Option[B] = Some(Some(1))
Как я могу сделать это дать мне значения Option[Option[Int]]
, а не Option[B]
? Я ожидаю, что я совершу глупую ошибку здесь, но не могу понять, что это такое.
Это аккуратный вопрос. Моим рефлексивным ответом было «просто использовать« Случай [A] », который даст вам правильный выводный тип, но это делает странный материал, например. 'simpleRec (List (List (1))): Option [Option [Int]]'. –
Можете ли вы вставить весь код? – nathanengineer