Whilst looking at OptionT today and adding some tests in #692, I noticed that the OptionT has a MonadCombine instance, plus implementations for empty and combine.
The tests exercise MonadCombineTests.monad instead of MonadCombineTests.monadCombine, which means that the implementations of empty and combine are not tested against the laws (or anything).
I briefly looked at increasing the test to monadCombine, but the current implementation of OptionT does not pass the laws, at least not for OptionT[List, Int].
I noticed that #687 proposes to remove, at least temporarily, the MonadCombine for XorT - if a similar approach is warranted here I can take a look. By similiar in this instance, I mean that it might make sense to reduce the implementation to Monad until the laws pass.
Whilst looking at
OptionTtoday and adding some tests in #692, I noticed that theOptionThas aMonadCombineinstance, plus implementations for empty and combine.The tests exercise
MonadCombineTests.monadinstead ofMonadCombineTests.monadCombine, which means that the implementations ofemptyandcombineare not tested against the laws (or anything).I briefly looked at increasing the test to
monadCombine, but the current implementation ofOptionTdoes not pass the laws, at least not forOptionT[List, Int].I noticed that #687 proposes to remove, at least temporarily, the
MonadCombineforXorT- if a similar approach is warranted here I can take a look. By similiar in this instance, I mean that it might make sense to reduce the implementation toMonaduntil the laws pass.