형식 제한이있는 abstract class Foo[V : Monoid]
에 Functor
을 정의 할 수 없습니다. 이는 Functor
의 map
메소드가 Monoid
이 아닌 B
매개 변수를 사용하기 때문입니다.형식 제약 조건을 functor 맵 함수에 추가하는 방법
제 질문은 어떻게 그런 제약 조건을 추가 할 수 있습니까?
import cats.Functor
import cats.kernel.Monoid
abstract class Foo[A : Monoid] {
val a: A
}
object Foo {
implicit def FooFunctor = new Functor[Foo] {
override def map[A, B](fa: Foo[A])(f: (A) => B) = new Foo[B] {
override val a: B = f(fa.a)
}
}
}
이 다음과 같은 예외를 발생 : 여기
내가 할 노력하고있어에서 샘플의 내 첫 번째 해결책으로map
정의에 제약 조건을 추가했다
Error:(12, 59) could not find implicit value for evidence parameter of type cats.kernel.Monoid[B]
override def map[A, B](fa: Foo[A])(f: (A) => B) = new Foo[B] {
(override def map[A, B : Monoid]
) 그러나 이것은 함수의 정의를 Functor
으로 변경하고 예외를 발생시킬 것이므로 유효하지 않습니다.
Error:(12, 18) method map overrides nothing.
아무도 도와 주실 수 없습니까? 어떤 제안이라도 인정 될 것입니다.
'Functor'대신에 'Applicative'가 필요합니까? 그런 식으로 당신은'Foo [B] '와'Foo [B]'를 만들 수 있습니다. –
이것은 일반적인 [XY 문제] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)처럼 보입니다. 이 코드로 해결하려는 실제 문제를 설명해 주시겠습니까? 'cats.Functor'는 가능한 모든 유형에 대해 정의되어야하기 때문에'Foo'는'cats' 정의에 따라'Functor '가 아닙니다. 그러나 아마도 이것은 당신이 정말로 필요로하는 것이 아닙니다. 그래서 당신의 높은 수준의 문제를 지정하고 누군가가 더 나은 솔루션을 내놓을 수 있습니다. – SergGr