Monad变压器非常棘手,我不确定(直觉不好)应该优先使用哪一个。
最佳答案
StateT s (ExceptT e m)
这说:
m
开头现在,“添加异常”意味着您的操作可以通过两种方式终止:具有正常的返回值或异常。
“添加状态”意味着正常返回值中会包含额外的状态输出。
因此,在
StateT s (ExceptT e m)
中,只有在没有异常的情况下您才能获得结果状态。另一方面,
ExceptT e (StateT s m)
说:
m
开头“添加状态”意味着
m
的返回值中包含了额外的状态输出。但是现在,您添加的例外被添加为
StateT
monad中的替代返回值。因此,您总是会得到一个状态输出,然后您可能会得到一个正常的返回值,或者您可能会收到一个异常。