저는 하스켈을 처음 보았고 천천히 모나드의 존재에 문제가 있다고 생각하고 있습니다. Real World Haskell warns against its use ("다시 한번, 거의 항상 실패하지 않는 것이 좋습니다!"). 방금 로스 패터슨이 "사마귀, 디자인 패턴이 아닙니다"라고 back in 2008 (그 스레드에서 꽤 동의하는 것처럼 보였습니다)라고 오늘 알게되었습니다.Monad 사용을 피하는 것이 좋습니까?
Dr. Ralf Lämmel talk on the essence of functional programming을 보면서 나는 Monad가 실패했을 수도있는 긴장을 이해하기 시작했습니다. 강의에서 Ralf는 기본 모나 딕 파서 (로깅, 상태 등)에 다양한 모나드 효과를 추가하는 방법에 대해 설명합니다. 대부분의 효과는 기본 구문 분석기와 때로는 사용되는 데이터 유형을 변경해야했습니다. 나는 '실패'가 너무 많아서 '기본'파서 (또는 무엇이든)를 가능한 한 많이 변경하지 않기를 원하기 때문에 모든 모나드에 '실패'를 추가하는 것이 타협 일 수 있다고 생각했습니다. 물론 어떤 종류의 '실패'는 파서에게는 의미가 있지만 항상 국가를 넣거나 얻는 것이 아니거나 독자에게 물어 보는 것이 아닙니다.
잘못된 트랙을 벗어날 수 있는지 알려주세요.
Monad 사용을 피해야합니까? Monad에 대한 대안은 무엇입니까? "디자인 사마귀"를 포함하지 않는 대체 모나드 라이브러리가 있습니까? 이 디자인 결정과 관련된 내역은 어디에서 더 읽을 수 있습니까?
[Real World Haskell says] (http://book.realworldhaskell.org/read/monads.html#monads.monad.fail) "[많은 모나드에서]'fail'은'error'를 사용합니다. 호출자가 잡을 수 없거나 기대하지 않을 수없는 예외를 throw하기 때문에 일반적으로 매우 바람직하지 않습니다. " – Miikka
짧은 대답 : 예. –
필자는 "그냥 x <- somethingReturningIoMaybe"와 같이 "fail"이 패턴 일치 실패를 처리해야한다고 생각합니다. –