나는 this question을 읽었습니다. 이 인스턴스 한편 GHC (7)와 함께 제공 기본 4.3.xx에 추가되었습니다모나드 또는 ErrorT 모나드 trasformer를 사용해야합니까?
, 당신은 당신이 뭔가를 표현하기 위해
Either
를 사용하는 경우, 직접Either
인스턴스를 사용하거나 할 수 있습니다 : 여기 허용 대답의 인용이다 당신이 실패 할 수도 있습니다ErrorT
모나드 변압기를 사용해야합니다.
는이 같은 뭔가를 Either
를 사용하려면 : 계산의 한 부분이 실패 할 경우
> (Left "bad thing happened") >>= \x -> Right (x ++ " ...")
Left "bad thing happened"
그래서, 그 Left
가 반환됩니다.
실제 질문은 Either
모나드가 아닌 ErrorT
모나드 트랜스포머를 사용해야하는 이유는 무엇입니까? 나는 하스켈의 초심자이며, 특히 모나드 변압기를 두려워하고있다. 특히 내가 이미 코드를 작성하고있을 때 그렇다.
예를 들어, IO 모나드가 단방향 모나드이기 때문에 모나드 변압기를 사용해야합니다. 'EitherT' 변압기가 있습니까? 'ExceptT'는'EitherT'처럼 작동합니까? – Mark
제 이해는 ExceptT가 변압기와 MTL에 의해 '축복받은'EitherT라는 것입니다. 나는 왜 EitherT가 외부인인지 모르지만 나는 ExceptT라는 이름을 더 좋아한다. – user239558
@Mark 실제로 나는 어느 쪽의 패키지에서나'EitherT'를 사용하게 될 것입니다 (http://haddocks.fpcomplete.com/fp/7.8/20140916-162/either/Control-Monad-Trans-Either.html).) 그것은 더 오랫동안 주변에 있었기 때문에. 이 둘은 기능적으로 동일합니다. 내 응답에서'ExceptT'를 참조했는데 왜냐하면'transformers'에서 나온 것이기 때문에'ErrorT'가 더 이상 사용되지 않습니다. –