Не удалось сопоставить HList

Я пытался решить эту проблему бесформенным. Однако по какой-то причине я не HList . Я позволю коду говорить сам за себя.

 import shapeless._ import HList._ case class Foo(a: Option[Int], b: Option[Int]) val a = Foo(Some(3), None) val b = Foo(Some(22), Some(1)) implicit val fooIso = HListIso(Foo.apply _, Foo.unapply _) val mapper = new (({ type O2[+A] = (Option[A], Option[A]) })#O2 ~> Option) { def apply[A](x: (Option[A], Option[A])): Option[A] = x._1.orElse(x._2) } fooIso.fromHList(fooIso.toHList(a).zip(fooIso.toHList(b)).map(mapper)) 

Сообщение об ошибке:

 :55: error: could not find implicit value for parameter mapper: shapeless.Mapper[java.lang.Object with shapeless.~>[[+A](Option[A], Option[A]),Option],shapeless.::[(Option[Int], Option[Int]),shapeless.::[(Option[Int], Option[Int]),shapeless.HNil]]] fooIso.fromHList(fooIso.toHList(a).zip(fooIso.toHList(b)).map(mapper)) ^ 

Почему отображение не работает?

    Есть простое решение: просто определите свою функцию как object вместо val :

     object f extends (({ type O2[+A] = (Option[A], Option[A]) })#O2 ~> Option) { def apply[A](x: (Option[A], Option[A])): Option[A] = x._1 orElse x._2 } 

    (Обратите внимание, что я назвал функцию f вместо mapper чтобы избежать путаницы с неявным аргументом mapper для map .)

    Я не уверен, что смогу помочь в этом, потому что в какой-то момент я попытался разобраться в деталях, почему val не будет работать для такого рода вещей в Shapeless, и я не помню, как далеко я получил.

    Interesting Posts
    Давайте будем гением компьютера.