I think we should add a type equivalent to the following to transformers (and mtl):
newtype ChoiceT m a = ChoiceT { runChoiceT :: m (Maybe (ChoiceT m a)) }
This is a monad transformer, while it's well-known that the existing ListT is not.
And perhaps we should add the relevant MonadChoice class here (subject to design discussion)
Ideally this would happen in cooperation between the two libraries, hence why I'm opening it here. We would at least need all the instances to lift MonadX through ChoiceT
Bikeshedding name suggestions: ChoiceT, StreamT, NonDetT, ...