{-# LANGUAGE EmptyCase, UndecidableSuperClasses #-} module Control.Subcategory.Alternative.Class (CChoice(..), CAlternative(..)) where import Control.Subcategory.Functor import qualified Control.Applicative as App infixl 3 <!> class CFunctor f => CChoice f where (<!>) :: Dom f a => f a -> f a -> f a default (<!>) :: App.Alternative f => f a -> f a -> f a (<!>) = (App.<|>) {-# INLINE (<!>) #-} class CChoice f => CAlternative f where cempty :: Dom f a => f a default cempty :: App.Alternative f => f a cempty = App.empty {-# INLINE cempty #-}