MonadThrow를 반환하기 위해 응용 검증을 설정하는 방법은 무엇입니까?

울리히 슈스터

Haskell에서 입력 데이터의 유효성을 검사하는 관용적 인 방법은 응용 체인을 이용하는 것 같습니다.

mkMyData :: a -> b -> c -> Maybe MyData
mkMyData x y z =
    MyData
        <$> validateA x
        <*> validateB y
        <*> validateC z

여기서 유효성 검사 함수 자체가 Maybe값을 반환 합니다. 내 스마트 생성자를 mkMyData더 유연 하게 만들기 위해 MonadThrow. 그건,

mkMyData :: MonadThrow m => a -> b -> c -> m MyData

MonadThrow대신 각 유효성 검사 함수를 반환해야합니까 Maybe? 아니면 응용 구조를 깨뜨리고 코드를 크게 복잡하게 만들지 않고 Maybe각 유효성 검사 의 특정 결과를보다 일반적인 것으로 변환 할 수있는 방법이 MonadThrow있습니까?

아니면 다르게 넣을까요? MonadThrow더 복잡하고 덜 관용적 인 코드를 희생하면서 기본 라이브러리 함수에서 더 일반적인 반환 유형 을 위해 노력하는 것이 가치가 있습니까?

아 말로이

이것에 대한 답은 마지막 질문 과 동일 합니다 . 새 유효성 검사 기능에 대해 제안하는 유형,

mkMyData :: MonadThrow m => a -> b -> c -> m MyData

모나드가 물건을 던지는 방법이있는 한 모든 모나드에서 전혀 작동 할 수 있음을 의미합니다. 해당 함수의 구현이 명시 적으로 반환 Nothing하거나 Just결과 를 반환 할 수 있는지에 의존하는 경우 해당 조건을 충족하지 않습니다.

대신 Maybe aMonadThrow에 의존 하도록 현재 반환되는 함수를 다시 작성해야합니다 . 예를 들어, 대신

validateA :: a -> Maybe t
validateA x | acceptable x = Just $ convert x
            | otherwise = Nothing

당신은 써야 할 것입니다

validateA :: MonadThrow m => a -> m t
validateA x | acceptable x = pure $ convert x
            | otherwise = throwM $ problemWith x

( x인수로 취하는 모든 기능 이 구성되어 도메인과 관련이 있어야 함).

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Yubikey OpenPGP 인증을 사용하기 위해 SSH / PuTTY를 설정하는 방법은 무엇입니까?

분류에서Dev

배열을 반환하기 위해 malloc () 함수를 사용하는 방법은 무엇입니까?

분류에서Dev

jinja2를 사용하기 위해 django 1.8을 설정하는 방법은 무엇입니까?

분류에서Dev

Google 인증기를 사용하는 Ubuntu 사용자를 위해 Ubuntu에서 2 단계 인증을 설정하는 방법은 무엇입니까?

분류에서Dev

Google 인증기를 사용하는 Ubuntu 사용자를 위해 Ubuntu에서 2 단계 인증을 설정하는 방법은 무엇입니까?

분류에서Dev

증분을 추적하기 위해 정적 변수를 사용하는 방법은 무엇입니까?

분류에서Dev

반응 형 레이아웃을 만들기 위해 CSS를 수정하는 방법은 무엇입니까?

분류에서Dev

테스트를 위해 사용자 지정 구성 파일을 설정하는 방법은 무엇입니까?

분류에서Dev

위치 Android를 저장하기 위해 공유 환경 설정을 사용하는 방법은 무엇입니까?

분류에서Dev

Joi를 사용하여 객체를 검증하기 위해 Joi.ref ()와 함께 수학 연산을 사용하는 방법은 무엇입니까?

분류에서Dev

새 사용자를 위해 GitHub에서 작업을 설정하는 방법은 무엇입니까?

분류에서Dev

기존에 설치된 OS를 사용하기 위해 KVM을 설치하는 방법은 무엇입니까?

분류에서Dev

기존에 설치된 OS를 사용하기 위해 KVM을 설치하는 방법은 무엇입니까?

분류에서Dev

고유성 검증을 통해 shoulda 매처를 올바르게 사용하는 방법은 무엇입니까?

분류에서Dev

요소를 얻기 위해 POST 본문 응답을 변환하는 방법은 무엇입니까?

분류에서Dev

JIRA API를 사용하기위한 서비스 계정을 설정하는 방법은 무엇입니까?

분류에서Dev

자동 업데이트를 위해 응용 프로그램을 중지하는 방법은 무엇입니까?

분류에서Dev

'.join'함수를 사용하기 위해 목록을 float로 변환하는 방법은 무엇입니까?

분류에서Dev

sshd를 사용하기 위해 cygwin을 제거 / 재설치하는 방법은 무엇입니까?

분류에서Dev

Bash를 사용하여 목록 환경 변수를 확인하기 위해 배열을 반복하는 방법은 무엇입니까?

분류에서Dev

Azure AD를 통해 사용자를 인증하도록 nginx를 설정하는 방법은 무엇입니까?

분류에서Dev

중첩 JSON을 반환하기 위해 API를 구현하는 방법은 무엇입니까?

분류에서Dev

Object 값을 반환하기 위해 computeIfAbsent를 구현하는 방법은 무엇입니까?

분류에서Dev

다른 기능에서 사용하기 위해 변수를 설정하는 방법은 무엇입니까?

분류에서Dev

과열을 방지하기 위해 온도 경고를 설정하는 방법은 무엇입니까?

분류에서Dev

과열을 방지하기 위해 온도 경고를 설정하는 방법은 무엇입니까?

분류에서Dev

단일 앰프 검색 사용을 피하기 위해 TD를 만드는 방법은 무엇입니까?

분류에서Dev

Whatsapp 인증 코드를 얻기 위해 yowsup-cli를 설정하고 사용하는 방법은 무엇입니까?

분류에서Dev

Firebase 인증 사용자를위한 맞춤 사용자 UID를 설정하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    Yubikey OpenPGP 인증을 사용하기 위해 SSH / PuTTY를 설정하는 방법은 무엇입니까?

  2. 2

    배열을 반환하기 위해 malloc () 함수를 사용하는 방법은 무엇입니까?

  3. 3

    jinja2를 사용하기 위해 django 1.8을 설정하는 방법은 무엇입니까?

  4. 4

    Google 인증기를 사용하는 Ubuntu 사용자를 위해 Ubuntu에서 2 단계 인증을 설정하는 방법은 무엇입니까?

  5. 5

    Google 인증기를 사용하는 Ubuntu 사용자를 위해 Ubuntu에서 2 단계 인증을 설정하는 방법은 무엇입니까?

  6. 6

    증분을 추적하기 위해 정적 변수를 사용하는 방법은 무엇입니까?

  7. 7

    반응 형 레이아웃을 만들기 위해 CSS를 수정하는 방법은 무엇입니까?

  8. 8

    테스트를 위해 사용자 지정 구성 파일을 설정하는 방법은 무엇입니까?

  9. 9

    위치 Android를 저장하기 위해 공유 환경 설정을 사용하는 방법은 무엇입니까?

  10. 10

    Joi를 사용하여 객체를 검증하기 위해 Joi.ref ()와 함께 수학 연산을 사용하는 방법은 무엇입니까?

  11. 11

    새 사용자를 위해 GitHub에서 작업을 설정하는 방법은 무엇입니까?

  12. 12

    기존에 설치된 OS를 사용하기 위해 KVM을 설치하는 방법은 무엇입니까?

  13. 13

    기존에 설치된 OS를 사용하기 위해 KVM을 설치하는 방법은 무엇입니까?

  14. 14

    고유성 검증을 통해 shoulda 매처를 올바르게 사용하는 방법은 무엇입니까?

  15. 15

    요소를 얻기 위해 POST 본문 응답을 변환하는 방법은 무엇입니까?

  16. 16

    JIRA API를 사용하기위한 서비스 계정을 설정하는 방법은 무엇입니까?

  17. 17

    자동 업데이트를 위해 응용 프로그램을 중지하는 방법은 무엇입니까?

  18. 18

    '.join'함수를 사용하기 위해 목록을 float로 변환하는 방법은 무엇입니까?

  19. 19

    sshd를 사용하기 위해 cygwin을 제거 / 재설치하는 방법은 무엇입니까?

  20. 20

    Bash를 사용하여 목록 환경 변수를 확인하기 위해 배열을 반복하는 방법은 무엇입니까?

  21. 21

    Azure AD를 통해 사용자를 인증하도록 nginx를 설정하는 방법은 무엇입니까?

  22. 22

    중첩 JSON을 반환하기 위해 API를 구현하는 방법은 무엇입니까?

  23. 23

    Object 값을 반환하기 위해 computeIfAbsent를 구현하는 방법은 무엇입니까?

  24. 24

    다른 기능에서 사용하기 위해 변수를 설정하는 방법은 무엇입니까?

  25. 25

    과열을 방지하기 위해 온도 경고를 설정하는 방법은 무엇입니까?

  26. 26

    과열을 방지하기 위해 온도 경고를 설정하는 방법은 무엇입니까?

  27. 27

    단일 앰프 검색 사용을 피하기 위해 TD를 만드는 방법은 무엇입니까?

  28. 28

    Whatsapp 인증 코드를 얻기 위해 yowsup-cli를 설정하고 사용하는 방법은 무엇입니까?

  29. 29

    Firebase 인증 사용자를위한 맞춤 사용자 UID를 설정하는 방법은 무엇입니까?

뜨겁다태그

보관