복붙노트

[SCALA] HList에지도 할 수 없습니다

SCALA

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))

오류 메시지는 다음과 같습니다

<console>: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))
                                                                           ^

왜 매핑 작동하지 않는 이유는 무엇입니까?

해결법

  1. ==============================

    1.쉽게 수정이있다 : 단지 대신 발의 대상으로 함수를 정의합니다 :

    쉽게 수정이있다 : 단지 대신 발의 대상으로 함수를 정의합니다 :

    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
    }
    

    (I 매핑하는 매퍼 암시 인수를 피하기 혼란 대신 매퍼의 함수 f라는 이름의 한합니다.)

    나는 확실히 나는-에서 왜 어떤 점 I가의 세부 사항을 해결하려고 도움을 줄 수 아니에요 왜 발은 볼품에서 이런 종류의 일에 대한 작동하지 않을 것입니다, 나는 내가 가진 얼마나 멀리 기억하지 않습니다.

  2. from https://stackoverflow.com/questions/11442440/unable-to-map-on-hlist by cc-by-sa and MIT license