각각 두 개의 변환 함수를 사용하는 왼쪽 및 오른쪽 케이스 모두를 변환 / 매핑하는 함수가 있습니까?

슈렉 예

I는 모두 맵핑 / 변환 할 수 스칼라 또는 하스켈 함수 찾지 못한 EitherLeftRight유형, 즉 함수 동시에 두 변환 기능을 가지고 사건

(A => C, B => D) => Either[C, D]

대한 Either[A, B]스칼라, 또는 유형

(a -> c, b -> d) -> Either a b -> Either c d

Haskell에서. Scala에서는 다음 fold과 같이 호출하는 것과 같습니다.

def mapLeftOrRight[A, B, C, D](e: Either[A, B], fa: A => C, fb: B => D): Either[C, D] =
  e.fold(a => Left(fa(a)), b => Right(fb(b)))

또는 Haskell에서는 다음 either과 같이 호출하는 것과 같습니다.

mapLeftOrRight :: (a -> c) -> (b -> d) -> Either a b -> Either c d
mapLeftOrRight fa fb = either (Left . fa) (Right . fb)

이와 같은 기능이 라이브러리에 있습니까? 그렇지 않다면 이와 같은 것이 매우 실용적이라고 생각하는데, 언어 디자이너는 왜 그것을 거기에 넣지 않기로 선택합니까?

좌회전

Scala에 대해 모르지만 Haskell에는 유형 서명에 대한 검색 엔진이 있습니다. 그것은 당신이 작성한 것에 대한 결과를 제공하지 않지만 Haskell 함수는 관례에 따라 curried 동안 튜플 인수를 취하기 때문 입니다. https://hoogle.haskell.org/?hoogle=(a -> c) -> (b -> d) -> Either a b -> Either c d가장 분명한 것은 다음과 같습니다.

mapBoth :: (a -> c) -> (b -> d) -> Either a b -> Either c d

... 실제로 Google조차도이를 발견합니다. 유형 변수가 생각한 것과 똑같기 때문입니다. (Hoogle은 당신(x -> y) -> (p -> q) -> Either x p -> Either y q 이 그것을 쓰면 그것을 또한 찾습니다 .)

그러나 실제로 Martijn이 말했듯이에 대한이 동작 Eitherbifunctor 의 특수한 경우 일 뿐이며 실제로 Hoogle은 base라이브러리에 정의 된보다 일반적인 형식도 제공합니다 .

bimap :: Bifunctor p => (a -> b) -> (c -> d) -> p a c -> p b d

TBH Hoogle이 자체적으로 서명을 커리거나 논쟁을 바꾸지 못하는 것에 대해 약간 실망합니다. 실제로 자동으로 수행하는 데 사용되었지만 어느 시점에서 그들은 엄청난 수의 라이브러리로 인해 시간이 걸리고 결과 수가 손에 닿지 않았기 때문에 알고리즘을 단순화했습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관