indexed-transformers-0.2.0.0: src/Control/Monad/Trans/Indexed/Do.hs
{- |
Module : Control.Monad.Trans.Indexed.Do
Copyright : (C) 2026 Eitan Chatav
License : BSD 3-Clause License (see the file LICENSE)
Maintainer : Eitan Chatav <eitan.chatav@gmail.com>
Qualified @Indexed.do@ notation.
>>> :set -XQualifiedDo
>>> import qualified Control.Monad.Trans.Indexed.Do as Indexed
-}
module Control.Monad.Trans.Indexed.Do
( (>>=)
, (>>)
, return
, fail
) where
import qualified Control.Monad as M
import qualified Control.Monad.Trans as T
import qualified Control.Monad.Trans.Indexed as Ix
import Prelude hiding ((>>=), (>>), fail)
{- | Indexed binding. -}
(>>=)
:: (Ix.IxMonadTrans t, M.Monad m)
=> t i j m x
-> (x -> t j k m y)
-> t i k m y
(>>=) = flip Ix.bindIx
{- | Indexed sequencing. -}
(>>)
:: (Ix.IxMonadTrans t, M.Monad m)
=> t i j m x
-> t j k m y
-> t i k m y
(>>) = flip Ix.thenIx
{- | Indexed failing. -}
fail
:: (Ix.IxMonadTrans t, M.MonadFail m, i ~ j)
=> String
-> t i j m x
fail = T.lift . M.fail