diff --git a/Control/Monad/Indexed/Fail.hs b/Control/Monad/Indexed/Fail.hs new file mode 100644 index 0000000..1175df4 --- /dev/null +++ b/Control/Monad/Indexed/Fail.hs @@ -0,0 +1,19 @@ +----------------------------------------------------------------------------- +-- | +-- Module : Control.Monad.Indexed.Fail +-- Copyright : (C) 2025 Rinse +-- License : BSD-style (see the file LICENSE) +-- +-- Maintainer : +-- Stability : experimental +-- Portability : portable +-- +---------------------------------------------------------------------------- +module Control.Monad.Indexed.Fail + ( IxMonadFail(..) + ) where + +import Control.Monad.Indexed + +class IxMonad m => IxMonadFail m where + ifail :: String -> m i i a diff --git a/Control/Monad/Indexed/QualifiedDo.hs b/Control/Monad/Indexed/QualifiedDo.hs new file mode 100644 index 0000000..c91c383 --- /dev/null +++ b/Control/Monad/Indexed/QualifiedDo.hs @@ -0,0 +1,48 @@ +----------------------------------------------------------------------------- +-- | +-- Module : Control.Monad.Indexed.QualifiedDo +-- Copyright : (C) 2025 Rinse +-- License : BSD-style (see the file LICENSE) +-- +-- Maintainer : +-- Stability : experimental +-- Portability : portable +-- +---------------------------------------------------------------------------- +module Control.Monad.Indexed.QualifiedDo + ( (>>=), (>>), return, fail + , fmap, (<*>), join, mfix + ) where + +import Control.Monad.Indexed +import Control.Monad.Indexed.Fail +import Control.Monad.Indexed.Fix +import qualified Prelude + +infixl 1 >>=, >> + +(>>=) :: IxMonad m => m i j a -> (a -> m j k b) -> m i k b +m >>= f = ibind f m + +(>>) :: IxMonad m => m i j a -> m j k b -> m i k b +m >> n = m >>= \_ -> n + +return :: IxPointed m => a -> m i i a +return = ireturn + +fail :: IxMonadFail m => Prelude.String -> m i i a +fail = ifail + +fmap :: IxFunctor f => (a -> b) -> f j k a -> f j k b +fmap = imap + +infixl 4 <*> + +(<*>) :: IxApplicative m => m i j (a -> b) -> m j k a -> m i k b +(<*>) = iap + +join :: IxMonad m => m i j (m j k a) -> m i k a +join = ijoin + +mfix :: IxMonadFix m => (a -> m i i a) -> m i i a +mfix = imfix diff --git a/indexed.cabal b/indexed.cabal index ee9df23..52f9c46 100644 --- a/indexed.cabal +++ b/indexed.cabal @@ -25,7 +25,9 @@ Library Exposed-modules: Data.Functor.Indexed, Control.Monad.Indexed, + Control.Monad.Indexed.Fail, Control.Monad.Indexed.Fix, + Control.Monad.Indexed.QualifiedDo, Control.Monad.Indexed.Trans Control.Comonad.Indexed default-language: Haskell98