[SCALA] 왜 목록 반군하지만 서열은 그렇지?
SCALA왜 목록 반군하지만 서열은 그렇지?
나는 scalaz에 비교적 새로운 그리고 난 다음 코드가 작동하는 이유를 알아 내려고 노력하고있다 :
import scalaz._
import Scalaz._
scala> Map[String,List[String]]() |+| Map[String,List[String]]()
res3: scala.collection.immutable.Map[String,List[String]] = Map()
그러나 이것은하지 않습니다 ...
import scalaz._
import Scalaz._
scala> Map[String,Seq[String]]() |+| Map[String,Seq[String]]()
<console>:14: error: value |+| is not a member of scala.collection.immutable.Map[String,Seq[String]]
Map[String,Seq[String]]() |+| Map[String,Seq[String]]()
나는 반군에 대한지도 암시 볼 수 있지만, 나는 목록 또는 서열에 대한 하나를 볼 수 없습니다.
커플 질문 :
해결법
-
==============================
1.그래서, Scalaz 7 [A] [목록] 다시 모노 이드 당신을 제공 모노 이드 기능을 암시 목록이있다. 우리는 목록이 덮여 그래서 모노 이드는 반군을 확장합니다.
그래서, Scalaz 7 [A] [목록] 다시 모노 이드 당신을 제공 모노 이드 기능을 암시 목록이있다. 우리는 목록이 덮여 그래서 모노 이드는 반군을 확장합니다.
서열이 특별 대우를하지 않습니다. 모노 이드 또는 반군에 서열로부터 암시 적 변환이 없습니다. 이 모노 이드에 대한 암시 IndexedSeq이다, 그러나 이것은 우리에게 도움이되지 않습니다.
왜이 서열에 대한 것이 아니다? 모르겠어요. 아무런 변환이 없다, 그래서 아마도 서열은 monoids / 반군의 몇 가지 법칙을 위반하는 것입니다. 그들이 일부 기능을 제거했습니다 있도록 Scalaz 6 서열에 문제가 있었다 것 같다 : https://groups.google.com/forum/?fromgroups=#!searchin/scalaz/Seq/scalaz/Deaec1H11W4/gYFSquXjTzYJ
최신 정보
scalaz의 사람들이이 길을 갔다 왜 스칼라 문서를 보면 그것은 더욱 분명해진다. 서열을 상속 목록 상속의 LinearSeq. IndexedSeq 서열을 상속합니다. 그들은 서열에 대한 반군을 제공한다면, 그것은 IndexedSeq 또는 LinearSeq과 둘 사이의 느슨한 성능 이점의 다른 반군을 무시할 수 있습니다. 당신이 APPEND의 scalaz 서명 보면 당신은 그들이 이러한 성능 차이를 활용할 것을 볼 수있다 :
https://github.com/scalaz/scalaz/blob/scalaz-seven/core/src/main/scala/scalaz/std/List.scala
implicit def listMonoid[A]: Monoid[List[A]] = new Monoid[List[A]] { def append(f1: List[A], f2: => List[A]) = f1 ::: f2 def zero: List[A] = Nil }
https://github.com/scalaz/scalaz/blob/scalaz-seven/core/src/main/scala/scalaz/std/IndexedSeq.scala
implicit def ixSqMonoid[A]: Monoid[IxSq[A]] = new Monoid[IxSq[A]] { def append(f1: IxSq[A], f2: => IxSq[A]) = f1 ++ f2 def zero: IxSq[A] = empty }
우리가 깊이 파고 경우에, 우리는 볼이 APPEND 작업보다 ::: 목록에 나쁜 성능을 가지고 서열만을 구현 ++. 따라서, 성능을 두 번째 질문에 대답합니다. scalaz 서열에 대한 반군 구현하면 색인을 위해 당신은 최적화 할 수 모호한 성능이 가장 가능성이 리드를 것입니다 것처럼. 반복 가능한 같은 문제가 있습니다.
from https://stackoverflow.com/questions/15623585/why-is-list-a-semigroup-but-seq-is-not by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 프로그래밍 방식으로 스칼라 컴파일러를 호출하는 방법? (0) | 2019.11.21 |
---|---|
[SCALA] 합니까 스칼라는 C #을 수율에 해당하는가? (0) | 2019.11.21 |
[SCALA] 스칼라에서 보간 문자열에 큰 따옴표를 삽입하는 방법 (0) | 2019.11.21 |
[SCALA] 스파크를 사용하여 간헐적 시간 제한 예외 (0) | 2019.11.21 |
[SCALA] 어떻게 스칼라 반사를 통해 기본 매개 변수 값에 액세스합니까? (0) | 2019.11.21 |