와 자기 사상의 컬렉션을 배하는 방법 g
내가 꽤 일반적인 콤비를 작성하려합니다</p> <pre><code>def f(i: I) : S => S </code></pre> <p>기능을 감안할 때 고양이
def g(is : Seq[I], init: S) : S
쉬운 구현은 고전적인 스칼라를 사용
def g(is : Seq[I], init: S) : S =
is.foldLeft(init){ case (acc, i) => f(i)(acc) }
Foldable
을 사용하려고했지만 컴파일 문제가 발생했습니다. .
- 이 있습니까 고양이 0에서 자기 사상의
- 모든
import
문을 함께 사용하면 편집 문제를 설명 할 수 있습니까? 올바른 수입을 쉽게 찾을 수있는 트릭이 있습니까? State
은이 경우 너무 강력한 추상화입니까?- 더 좋은 방법이 있습니까?
Monoid
:
import cats._
import cats.Monoid
import cats.implicits._
def g(is : Seq[I], init: S) : S =
Foldable[List].foldMap(is.toList)(f _)(init)
오류가
could not find implicit value for parameter B: cats.Monoid[S => S]
은 제가 몇 가지 질문이
import cats.data.State
import cats.instances.all._
import cats.syntax.traverse._
def g(is : Seq[I], init: S) : S =
is.toList.map(i => State.modify(f(i))).sequenceU.runS(init).value
State
성공
내가 1
type Endo[S] = S => S
def g(is : Seq[I], init: S) : S
= Foldable[List].foldK[Endo, S](dirs.toList.map(f _))
에 대한 해결 방법을 발견했습니다하지만 여전히 foldMapK
이 상용구를 피하기 위해 [업데이트] ...
당신은'Monoid' 인스턴스를 직접 지정할 수 있습니다 :'Foldable [List] .foldMap (is.toList) (f _) (MonoidK [Endo]. 대수) (init)' –