나는 Haskel에서 Maybe-idiom을 적용하는 방법을 이해하려고 노력 중입니다 ... http://en.wikibooks.org/wiki/Haskell/Understanding_monads/Maybe은 사전에서 조회가 Maybe
을 반환하고이 값이 >>=
연산자를 통해 전달됨을 보여줍니다.오류 처리 및 모나드?
URL의 예 :
우리는 다음 (우리는 그들이 어떤 자동차 세를 빚지고 있는지 확인하기 위해 자신의 등록 번호를 조회하고 싶은 말) 세 번째 조회에 정부 데이터베이스 검색에서 결과를 사용하고자하는 경우
getTaxOwed name = do
number <- lookup name phonebook
registration <- lookup number governmentalDatabase
lookup registration taxDatabase
질문 : DO-블록 스타일을 사용하여,
getTaxOwed :: String -- their name
-> Maybe Double -- the amount of tax they owe
getTaxOwed name =
lookup name phonebook >>=
(\number -> lookup number governmentalDatabase) >>=
(\registration -> lookup registration taxDatabase)
또는 :, 우리는 우리의 getRegistrationNumber 기능을 확장 할 수 :
오류 처리는 어떻게 처리합니까? 나는 대부분의 코드가 일이 잘못되었다는 것을 알면 도움이 될 것이라고 생각한다. 단순히 "전화 번호부 또는 정부 데이터베이스에서 John Doe를 찾을 수 없음"을보고하기보다는 어떤 자원에 문제가 있는지보고해야합니다.
당신이 발견 한 것은 아마 하나의 가능한 실패 사례가있을 경우 Maybe가 가장 유용하다는 것입니다. 음수의 제곱근을 생각하십시오. 반면에'sqrt :: Either Complex Double'을 만들 수 있습니다. – Sarah
네, 맞습니다. 여기 http://hackage.haskell.org/packages/archive/transformers/0.3.0.0/doc/html/Control-Monad-Trans-Error.html 문제에 대한 일반적인 해결책이 있습니다. 아마도 정확한 오류 처리에 관한 것이 아닙니다. – permeakra