    -- | This module exists to work nicely with the QualifiedDo
    -- extension.
    --
    -- @
    -- import qualified Language.Haskell.TH.CodeDo as Code
    --
    -- myExample :: Monad m => Code m a -> Code m a -> Code m a
    -- myExample opt1 opt2 =
    --   Code.do
    --    x <- someSideEffect               -- This one is of type `M Bool`
    --    if x then opt1 else opt2
    -- @
    module Language.Haskell.TH.CodeDo((>>=), (>>)) where

    import Language.Haskell.TH.Syntax
    import Prelude(Monad)

    -- | Module over monad operator for 'Code'
    (>>=) :: Monad m => m a -> (a -> Code m b) -> Code m b
    >>= :: forall (m :: * -> *) a b.
    Monad m =>
    m a -> (a -> Code m b) -> Code m b
    (>>=) = m a -> (a -> Code m b) -> Code m b
    forall (m :: * -> *) a b.
    Monad m =>
    m a -> (a -> Code m b) -> Code m b
    bindCode
    (>>) :: Monad m => m a -> Code m b -> Code m b
    >> :: forall (m :: * -> *) a b. Monad m => m a -> Code m b -> Code m b
    (>>)  = m a -> Code m b -> Code m b
    forall (m :: * -> *) a b. Monad m => m a -> Code m b -> Code m b
    bindCode_