[SCALA] 어떻게 A [B [C]가] B로 변환하는 [A [C]] A와 B는 모나드가 있다면?
SCALA어떻게 A [B [C]가] B로 변환하는 [A [C]] A와 B는 모나드가 있다면?
나는 같은를 달성하기 위해 (그리고 아마도 monoids) 모나드를 악용하는 더 일반적인 솔루션을 찾고 있어요 다른 (xs.contains (없음)) 중에 일부 (xs.flatten가) 형 서열의 XS의 경우와없는 경우 [옵션 A]].
나는 Scalaz에 어떻게 그렇게 할 수 있습니까? 나는 분명 뭔가 빠진 것 같은 느낌.
해결법
-
==============================
1.이 모나드를 갖는 두 부족 (M에 대한) 더 (N에 대한) 충분 - 어떤이의에 충분한까지 추가 과정 - 그러나 M은 트래버스 인스턴스를 가지고 있으며, N은 실용적 인스턴스가있는 경우, 당신은 순서를 사용할 수 있습니다. 예를 들면 :
이 모나드를 갖는 두 부족 (M에 대한) 더 (N에 대한) 충분 - 어떤이의에 충분한까지 추가 과정 - 그러나 M은 트래버스 인스턴스를 가지고 있으며, N은 실용적 인스턴스가있는 경우, 당신은 순서를 사용할 수 있습니다. 예를 들면 :
import scalaz._, Scalaz._ def foo[A](xs: List[Option[A]]): Option[List[A]] = xs.sequence
이것은 당신이 원하는 의미를 가지고있다. Scalaz 7이 더 이상 서열에 필요한 트래버스 인스턴스를 제공하기 때문에 (당신은 쉽게 자신을 쓸 수 있지만) 내가 대신 서열 목록을 사용하지 않는거야 있습니다.
당신이 눈치 챘을 때, 다음은 컴파일되지 않습니다 :
List(Some(1), Some(45)).sequence
당신이 거기에 없음을 던져없는 경우는 괜찮습니다 비록 :
scala> List(Some(1), None, Some(45)).sequence res0: Option[List[Int]] = None
목록의 추론 유형 (일부 (1), 일부 (45))입니다 목록 [일부 [지능이], 우리는 일부에 대한 실용적 인스턴스를 가지고 있지 않기 때문입니다.
Scalaz는 Some.apply처럼 작동하지만 당신은 이미 옵션으로 입력 뭔가를 제공하는 편리한 몇 가지 방법을 제공합니다, 그래서 당신은 다음과 같이 쓸 수 있습니다 :
scala> List(some(1), some(45)).sequence res1: Option[List[Int]] = Some(List(1, 45))
필요한 엑스트라 입력합니다.
from https://stackoverflow.com/questions/12358673/how-to-convert-abc-to-bac-if-a-and-b-are-monads by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스칼라는 최소한의 기능을 강조 (0) | 2019.11.04 |
---|---|
[SCALA] 스파크 쉼표 목록, 어떻게 항아리의 디렉토리를 선언하는 원한다 --jars 인수를 스파크 제출? (0) | 2019.11.04 |
[SCALA] 표준 출력에에 println ()를 잃고 스파크 (0) | 2019.11.04 |
[SCALA] 어떻게 동일한 열 값이 dataframes로 dataframe을 분할하는? (0) | 2019.11.04 |
[SCALA] 무엇 스파크의`unionAll``DataFrame`으로 잘못된 것입니다? (0) | 2019.11.04 |