하스켈에서 아마도 및 두 기능을 일반화하십시오.

약하다

아마도 및 둘 중 하나의 함수를 일반화하는 함수가 haskell에 있습니까?

예를 들어, 다음과 같은 함수를 상상하고 있습니다.

generalizedFunc :: SOMETHING m => b -> (a -> b) -> m a -> b
generalizedFunc valForError f value = ...

ghci에서 작업하는 것은 다음과 같습니다.

> generalizedFunc "bye" (\_ -> "hello") (Just 3)
"hello"
> generalizedFunc "bye" (\_ -> "hello") Nothing
"bye"
> generalizedFunc "bye" (\_ -> "hello") (Right 3)
"hello"
> generalizedFunc "bye" (\_ -> "hello") (Left "error")
"bye"

참고 : Tom Ellis는 이것이 Either의 일반화가 아니라 전문화라는 좋은 지적을합니다.

사용자 824425

예. 당신이 찾고있는 것은입니다 Data.Foldable. foldr모든 대수 데이터 유형으로 일반화합니다 (목록의 경우).

Data.List.foldr     :: (a -> b -> b) -> b     ->   []       a -> b
maybe               :: b -> (a -> b)          ->   Maybe    a -> b
either              :: (a -> c) -> (b -> c)   ->   Either a b -> c
---
Data.Foldable.foldr :: Foldable t
                    => (a -> b -> b) -> b     ->   t        a -> b

코드가에서 generalizedFunc "bye" (\_ -> "hello")변경 됩니다 foldr (\_ _ -> "hello") "bye". 컴파일러에게 foldrfrom 을 의미하는지 확인하십시오 Data.Foldable. 모듈 설명서를 참조하십시오.

안타깝게도 Foldable (Either a)GHC 버전 에서 인스턴스가 누락되었을 수 있지만 직접 작성하는 것은 비교적 쉽습니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

sting [] 및 문자열 모두에서 작동하도록 함수를 더 일반적으로 만드십시오.

분류에서Dev

재 동기화 및 파일 소유권-서버에서 소유권을 변경하지 마십시오.

분류에서Dev

모두가 아닌 git에서 Select Submodule을 초기화하십시오.

분류에서Dev

foreach로 동일한 기능을 3 번 반복하지 마십시오.

분류에서Dev

Spring Batch에서 동일한 파일을 두 번 처리하지 마십시오.

분류에서Dev

동일한 입력을 두 번 입력하지 마십시오.

분류에서Dev

하스켈에서 LHS 및 RHS의 기능을 사용하는 기능 정의는 어떻게 / 왜 작동합니까?

분류에서Dev

경고 대화 상자 조각에서 동일한 줄에 양수 및 음수 버튼을 모두 설정하십시오.

분류에서Dev

나침반을 설치할 때 print.scss 및 screen.scss sass 파일을 생성하지 마십시오.

분류에서Dev

그룹 및 날짜에 따라 spreedsheet를 정렬합니다. 그룹 크기가 일치하지 않는 경우에도 공백으로 두십시오.

분류에서Dev

스타일에 아이템을 사용하지 마십시오

분류에서Dev

다른 열의 값이 두 파일에서 일치하면 한 열의 awk 및 substract 값을 가진 두 파일을 비교하십시오.

분류에서Dev

조건에 따라 표시되는 두 개의보기에 동일한`navigationBarTitle` 및`navigationBarItems`를 사용하십시오.

분류에서Dev

jQuery 기능 및 페이지 다시로드 문제 (아마도)

분류에서Dev

파이썬을 사용하여 텍스트 파일에서 중복 (원본 및 중복)을 모두 제거하십시오.

분류에서Dev

두 번째 클릭에서 JQUERY로 다른 기능을 실행하십시오.

분류에서Dev

IE에서 자바 스크립트 기능을 실행하지 마십시오.

분류에서Dev

IE에서 자바 스크립트 기능을 실행하지 마십시오.

분류에서Dev

두 기능을 하나로

분류에서Dev

두 개의 다른 테이블에서 항목 행을 반복하지 마십시오.

분류에서Dev

하스켈에서 단어 바꾸기

분류에서Dev

하스켈에서 목록 짜기

분류에서Dev

Rails 4에서 별도의 레이아웃의 CSS 파일을 렌더링하지 마십시오 (스타일 시트 충돌).

분류에서Dev

Javascript 기능에 대해 반복하지 마십시오.

분류에서Dev

두 기능을 동시에 실행하면서 테스트

분류에서Dev

두 개의 "아마도"모나드 내의 값을 곱하는 것은?

분류에서Dev

Python pandas에서 데이터 프레임의 마지막 두 열에 동일한 텍스트를 포함하는 행을 선택하십시오.

분류에서Dev

git을 사용하여 두 개의 동일한 저장소를 로컬 및 원격 호스트 (github 아님)에서 동기화

분류에서Dev

Regedit의 모든 기능을 찾아서 삭제하십시오.

Related 관련 기사

  1. 1

    sting [] 및 문자열 모두에서 작동하도록 함수를 더 일반적으로 만드십시오.

  2. 2

    재 동기화 및 파일 소유권-서버에서 소유권을 변경하지 마십시오.

  3. 3

    모두가 아닌 git에서 Select Submodule을 초기화하십시오.

  4. 4

    foreach로 동일한 기능을 3 번 반복하지 마십시오.

  5. 5

    Spring Batch에서 동일한 파일을 두 번 처리하지 마십시오.

  6. 6

    동일한 입력을 두 번 입력하지 마십시오.

  7. 7

    하스켈에서 LHS 및 RHS의 기능을 사용하는 기능 정의는 어떻게 / 왜 작동합니까?

  8. 8

    경고 대화 상자 조각에서 동일한 줄에 양수 및 음수 버튼을 모두 설정하십시오.

  9. 9

    나침반을 설치할 때 print.scss 및 screen.scss sass 파일을 생성하지 마십시오.

  10. 10

    그룹 및 날짜에 따라 spreedsheet를 정렬합니다. 그룹 크기가 일치하지 않는 경우에도 공백으로 두십시오.

  11. 11

    스타일에 아이템을 사용하지 마십시오

  12. 12

    다른 열의 값이 두 파일에서 일치하면 한 열의 awk 및 substract 값을 가진 두 파일을 비교하십시오.

  13. 13

    조건에 따라 표시되는 두 개의보기에 동일한`navigationBarTitle` 및`navigationBarItems`를 사용하십시오.

  14. 14

    jQuery 기능 및 페이지 다시로드 문제 (아마도)

  15. 15

    파이썬을 사용하여 텍스트 파일에서 중복 (원본 및 중복)을 모두 제거하십시오.

  16. 16

    두 번째 클릭에서 JQUERY로 다른 기능을 실행하십시오.

  17. 17

    IE에서 자바 스크립트 기능을 실행하지 마십시오.

  18. 18

    IE에서 자바 스크립트 기능을 실행하지 마십시오.

  19. 19

    두 기능을 하나로

  20. 20

    두 개의 다른 테이블에서 항목 행을 반복하지 마십시오.

  21. 21

    하스켈에서 단어 바꾸기

  22. 22

    하스켈에서 목록 짜기

  23. 23

    Rails 4에서 별도의 레이아웃의 CSS 파일을 렌더링하지 마십시오 (스타일 시트 충돌).

  24. 24

    Javascript 기능에 대해 반복하지 마십시오.

  25. 25

    두 기능을 동시에 실행하면서 테스트

  26. 26

    두 개의 "아마도"모나드 내의 값을 곱하는 것은?

  27. 27

    Python pandas에서 데이터 프레임의 마지막 두 열에 동일한 텍스트를 포함하는 행을 선택하십시오.

  28. 28

    git을 사용하여 두 개의 동일한 저장소를 로컬 및 원격 호스트 (github 아님)에서 동기화

  29. 29

    Regedit의 모든 기능을 찾아서 삭제하십시오.

뜨겁다태그

보관