class (Applicative f) <= Selective f where
Selective is a typeclass somewhere between
It adds the ability to have conditionals on top of
still allows static analyzis of the program.
We can leverage the default Monad implementation for many of the instances since they are Monads anyway. We still get the benefits though.