{-# LANGUAGE TypeFamilies, ConstraintKinds #-} module Control.IxMonad.Cond where import GHC.Prim class Cond m where type AltInv m s t :: Constraint type AltInv m s t = () type Alt m s t ifM :: AltInv m s t => Bool -> m s a -> m t a -> m (Alt m s t) a -- Related to indexed 'applicative' functors/idioms -- which are indexed monoidal functors