module Control.Monad.Poly (module Control.Monad.Poly, module X) where
import Prelude
import Control.Applicative.Poly
import Control.Applicative.Poly as X (PolyBind, MonoBind)
class PolyApplicative m n => PolyMonad m n where (>>>=) :: m a -> (a -> n b) -> PolyBind m n b
instance (Monad m, MonoBind m, PolyApplicative m m) => PolyMonad m m where (>>>=) = (>>=)
polyBind :: PolyMonad m n => m a -> (a -> n b) -> PolyBind m n b
polyBind = (>>>=)
polyJoin :: PolyMonad m n => m (n a) -> PolyBind m n a
polyJoin = (>>>= id)