indexed-extras 0.1.1 → 0.2
raw patch · 2 files changed
+33/−11 lines, 2 filesdep ~bifunctorsdep ~mtldep ~pointedPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: bifunctors, mtl, pointed
API changes (from Hackage documentation)
- Control.Monad.Indexed.Cont: instance Applicative (IxCont i i)
- Control.Monad.Indexed.Cont: instance Functor (IxCont i j)
- Control.Monad.Indexed.Cont: instance IxApplicative IxCont
- Control.Monad.Indexed.Cont: instance IxFunctor (IxContT m)
- Control.Monad.Indexed.Cont: instance IxFunctor IxCont
- Control.Monad.Indexed.Cont: instance IxMonad IxCont
- Control.Monad.Indexed.Cont: instance IxMonadCont IxCont
- Control.Monad.Indexed.Cont: instance IxMonadTrans IxContT
- Control.Monad.Indexed.Cont: instance IxPointed (IxContT m)
- Control.Monad.Indexed.Cont: instance IxPointed IxCont
- Control.Monad.Indexed.Cont: instance Monad (IxCont i i)
- Control.Monad.Indexed.Cont: instance Monad m => Applicative (IxContT m i i)
- Control.Monad.Indexed.Cont: instance Monad m => Functor (IxContT m i j)
- Control.Monad.Indexed.Cont: instance Monad m => IxApplicative (IxContT m)
- Control.Monad.Indexed.Cont: instance Monad m => IxMonad (IxContT m)
- Control.Monad.Indexed.Cont: instance Monad m => IxMonadCont (IxContT m)
- Control.Monad.Indexed.Cont: instance Monad m => Monad (IxContT m i i)
- Control.Monad.Indexed.Cont: instance Monad m => Pointed (IxContT m i i)
- Control.Monad.Indexed.Cont: instance MonadIO m => MonadIO (IxContT m i i)
- Control.Monad.Indexed.Cont: instance MonadReader e m => MonadReader e (IxContT m i i)
- Control.Monad.Indexed.Cont: instance MonadState e m => MonadState e (IxContT m i i)
- Control.Monad.Indexed.Cont: instance Pointed (IxCont i i)
- Control.Monad.Indexed.Cont: runIxContT :: IxContT m r o a -> (a -> m o) -> m r
- Control.Monad.Indexed.State: instance Applicative (IxState i i)
- Control.Monad.Indexed.State: instance Bifunctor (IxState i)
- Control.Monad.Indexed.State: instance Functor (IxState i j)
- Control.Monad.Indexed.State: instance IxApplicative IxState
- Control.Monad.Indexed.State: instance IxFunctor IxState
- Control.Monad.Indexed.State: instance IxMonad IxState
- Control.Monad.Indexed.State: instance IxMonadFix IxState
- Control.Monad.Indexed.State: instance IxMonadState IxState
- Control.Monad.Indexed.State: instance IxMonadTrans IxStateT
- Control.Monad.Indexed.State: instance IxPointed IxState
- Control.Monad.Indexed.State: instance Monad (IxState i i)
- Control.Monad.Indexed.State: instance Monad m => Applicative (IxStateT m i i)
- Control.Monad.Indexed.State: instance Monad m => Bifunctor (IxStateT m i)
- Control.Monad.Indexed.State: instance Monad m => Functor (IxStateT m i j)
- Control.Monad.Indexed.State: instance Monad m => IxApplicative (IxStateT m)
- Control.Monad.Indexed.State: instance Monad m => IxFunctor (IxStateT m)
- Control.Monad.Indexed.State: instance Monad m => IxMonad (IxStateT m)
- Control.Monad.Indexed.State: instance Monad m => IxMonadState (IxStateT m)
- Control.Monad.Indexed.State: instance Monad m => IxPointed (IxStateT m)
- Control.Monad.Indexed.State: instance Monad m => Monad (IxStateT m i i)
- Control.Monad.Indexed.State: instance Monad m => MonadState i (IxStateT m i i)
- Control.Monad.Indexed.State: instance MonadCont m => MonadCont (IxStateT m i i)
- Control.Monad.Indexed.State: instance MonadError e m => MonadError e (IxStateT m i i)
- Control.Monad.Indexed.State: instance MonadFix (IxState i i)
- Control.Monad.Indexed.State: instance MonadFix m => IxMonadFix (IxStateT m)
- Control.Monad.Indexed.State: instance MonadFix m => MonadFix (IxStateT m i i)
- Control.Monad.Indexed.State: instance MonadIO m => MonadIO (IxStateT m i i)
- Control.Monad.Indexed.State: instance MonadPlus m => IxMonadPlus (IxStateT m)
- Control.Monad.Indexed.State: instance MonadPlus m => IxMonadZero (IxStateT m)
- Control.Monad.Indexed.State: instance MonadReader r m => MonadReader r (IxStateT m i i)
- Control.Monad.Indexed.State: instance MonadState i (IxState i i)
- Control.Monad.Indexed.State: instance MonadWriter w m => MonadWriter w (IxStateT m i i)
- Control.Monad.Indexed.State: runIxState :: IxState i j a -> i -> (a, j)
- Control.Monad.Indexed.State: runIxStateT :: IxStateT m i j a -> i -> m (a, j)
+ Control.Monad.Indexed.Cont: [runIxContT] :: IxContT m r o a -> (a -> m o) -> m r
+ Control.Monad.Indexed.Cont: instance Control.Monad.Cont.Class.MonadCont (Control.Monad.Indexed.Cont.IxCont i i)
+ Control.Monad.Indexed.Cont: instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Control.Monad.Indexed.Cont.IxContT m i i)
+ Control.Monad.Indexed.Cont: instance Control.Monad.Indexed.Cont.IxMonadCont Control.Monad.Indexed.Cont.IxCont
+ Control.Monad.Indexed.Cont: instance Control.Monad.Indexed.IxMonad Control.Monad.Indexed.Cont.IxCont
+ Control.Monad.Indexed.Cont: instance Control.Monad.Indexed.Trans.IxMonadTrans Control.Monad.Indexed.Cont.IxContT
+ Control.Monad.Indexed.Cont: instance Control.Monad.Reader.Class.MonadReader e m => Control.Monad.Reader.Class.MonadReader e (Control.Monad.Indexed.Cont.IxContT m i i)
+ Control.Monad.Indexed.Cont: instance Control.Monad.State.Class.MonadState e m => Control.Monad.State.Class.MonadState e (Control.Monad.Indexed.Cont.IxContT m i i)
+ Control.Monad.Indexed.Cont: instance Data.Functor.Indexed.IxApplicative Control.Monad.Indexed.Cont.IxCont
+ Control.Monad.Indexed.Cont: instance Data.Functor.Indexed.IxFunctor (Control.Monad.Indexed.Cont.IxContT m)
+ Control.Monad.Indexed.Cont: instance Data.Functor.Indexed.IxFunctor Control.Monad.Indexed.Cont.IxCont
+ Control.Monad.Indexed.Cont: instance Data.Functor.Indexed.IxPointed (Control.Monad.Indexed.Cont.IxContT m)
+ Control.Monad.Indexed.Cont: instance Data.Functor.Indexed.IxPointed Control.Monad.Indexed.Cont.IxCont
+ Control.Monad.Indexed.Cont: instance Data.Pointed.Pointed (Control.Monad.Indexed.Cont.IxCont i i)
+ Control.Monad.Indexed.Cont: instance GHC.Base.Applicative (Control.Monad.Indexed.Cont.IxCont i i)
+ Control.Monad.Indexed.Cont: instance GHC.Base.Functor (Control.Monad.Indexed.Cont.IxCont i j)
+ Control.Monad.Indexed.Cont: instance GHC.Base.Monad (Control.Monad.Indexed.Cont.IxCont i i)
+ Control.Monad.Indexed.Cont: instance GHC.Base.Monad m => Control.Monad.Cont.Class.MonadCont (Control.Monad.Indexed.Cont.IxContT m i i)
+ Control.Monad.Indexed.Cont: instance GHC.Base.Monad m => Control.Monad.Indexed.Cont.IxMonadCont (Control.Monad.Indexed.Cont.IxContT m)
+ Control.Monad.Indexed.Cont: instance GHC.Base.Monad m => Control.Monad.Indexed.IxMonad (Control.Monad.Indexed.Cont.IxContT m)
+ Control.Monad.Indexed.Cont: instance GHC.Base.Monad m => Data.Functor.Indexed.IxApplicative (Control.Monad.Indexed.Cont.IxContT m)
+ Control.Monad.Indexed.Cont: instance GHC.Base.Monad m => Data.Pointed.Pointed (Control.Monad.Indexed.Cont.IxContT m i i)
+ Control.Monad.Indexed.Cont: instance GHC.Base.Monad m => GHC.Base.Applicative (Control.Monad.Indexed.Cont.IxContT m i i)
+ Control.Monad.Indexed.Cont: instance GHC.Base.Monad m => GHC.Base.Functor (Control.Monad.Indexed.Cont.IxContT m i j)
+ Control.Monad.Indexed.Cont: instance GHC.Base.Monad m => GHC.Base.Monad (Control.Monad.Indexed.Cont.IxContT m i i)
+ Control.Monad.Indexed.State: [runIxStateT] :: IxStateT m i j a -> i -> m (a, j)
+ Control.Monad.Indexed.State: [runIxState] :: IxState i j a -> i -> (a, j)
+ Control.Monad.Indexed.State: instance Control.Monad.Cont.Class.MonadCont m => Control.Monad.Cont.Class.MonadCont (Control.Monad.Indexed.State.IxStateT m i i)
+ Control.Monad.Indexed.State: instance Control.Monad.Error.Class.MonadError e m => Control.Monad.Error.Class.MonadError e (Control.Monad.Indexed.State.IxStateT m i i)
+ Control.Monad.Indexed.State: instance Control.Monad.Fix.MonadFix (Control.Monad.Indexed.State.IxState i i)
+ Control.Monad.Indexed.State: instance Control.Monad.Fix.MonadFix m => Control.Monad.Fix.MonadFix (Control.Monad.Indexed.State.IxStateT m i i)
+ Control.Monad.Indexed.State: instance Control.Monad.Fix.MonadFix m => Control.Monad.Indexed.Fix.IxMonadFix (Control.Monad.Indexed.State.IxStateT m)
+ Control.Monad.Indexed.State: instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Control.Monad.Indexed.State.IxStateT m i i)
+ Control.Monad.Indexed.State: instance Control.Monad.Indexed.Fix.IxMonadFix Control.Monad.Indexed.State.IxState
+ Control.Monad.Indexed.State: instance Control.Monad.Indexed.IxMonad Control.Monad.Indexed.State.IxState
+ Control.Monad.Indexed.State: instance Control.Monad.Indexed.State.IxMonadState Control.Monad.Indexed.State.IxState
+ Control.Monad.Indexed.State: instance Control.Monad.Indexed.Trans.IxMonadTrans Control.Monad.Indexed.State.IxStateT
+ Control.Monad.Indexed.State: instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Indexed.State.IxStateT m i i)
+ Control.Monad.Indexed.State: instance Control.Monad.State.Class.MonadState i (Control.Monad.Indexed.State.IxState i i)
+ Control.Monad.Indexed.State: instance Control.Monad.Writer.Class.MonadWriter w m => Control.Monad.Writer.Class.MonadWriter w (Control.Monad.Indexed.State.IxStateT m i i)
+ Control.Monad.Indexed.State: instance Data.Bifunctor.Bifunctor (Control.Monad.Indexed.State.IxState i)
+ Control.Monad.Indexed.State: instance Data.Functor.Indexed.IxApplicative Control.Monad.Indexed.State.IxState
+ Control.Monad.Indexed.State: instance Data.Functor.Indexed.IxFunctor Control.Monad.Indexed.State.IxState
+ Control.Monad.Indexed.State: instance Data.Functor.Indexed.IxPointed Control.Monad.Indexed.State.IxState
+ Control.Monad.Indexed.State: instance GHC.Base.Applicative (Control.Monad.Indexed.State.IxState i i)
+ Control.Monad.Indexed.State: instance GHC.Base.Functor (Control.Monad.Indexed.State.IxState i j)
+ Control.Monad.Indexed.State: instance GHC.Base.Monad (Control.Monad.Indexed.State.IxState i i)
+ Control.Monad.Indexed.State: instance GHC.Base.Monad m => Control.Monad.Indexed.IxMonad (Control.Monad.Indexed.State.IxStateT m)
+ Control.Monad.Indexed.State: instance GHC.Base.Monad m => Control.Monad.Indexed.State.IxMonadState (Control.Monad.Indexed.State.IxStateT m)
+ Control.Monad.Indexed.State: instance GHC.Base.Monad m => Control.Monad.State.Class.MonadState i (Control.Monad.Indexed.State.IxStateT m i i)
+ Control.Monad.Indexed.State: instance GHC.Base.Monad m => Data.Bifunctor.Bifunctor (Control.Monad.Indexed.State.IxStateT m i)
+ Control.Monad.Indexed.State: instance GHC.Base.Monad m => Data.Functor.Indexed.IxApplicative (Control.Monad.Indexed.State.IxStateT m)
+ Control.Monad.Indexed.State: instance GHC.Base.Monad m => Data.Functor.Indexed.IxFunctor (Control.Monad.Indexed.State.IxStateT m)
+ Control.Monad.Indexed.State: instance GHC.Base.Monad m => Data.Functor.Indexed.IxPointed (Control.Monad.Indexed.State.IxStateT m)
+ Control.Monad.Indexed.State: instance GHC.Base.Monad m => GHC.Base.Applicative (Control.Monad.Indexed.State.IxStateT m i i)
+ Control.Monad.Indexed.State: instance GHC.Base.Monad m => GHC.Base.Functor (Control.Monad.Indexed.State.IxStateT m i j)
+ Control.Monad.Indexed.State: instance GHC.Base.Monad m => GHC.Base.Monad (Control.Monad.Indexed.State.IxStateT m i i)
+ Control.Monad.Indexed.State: instance GHC.Base.MonadPlus m => Control.Monad.Indexed.IxMonadPlus (Control.Monad.Indexed.State.IxStateT m)
+ Control.Monad.Indexed.State: instance GHC.Base.MonadPlus m => Control.Monad.Indexed.IxMonadZero (Control.Monad.Indexed.State.IxStateT m)
- Control.Monad.Indexed.Cont: shift :: IxMonadCont m => (forall i. (a -> m i i o) -> m r j j) -> m r o a
+ Control.Monad.Indexed.Cont: shift :: IxMonadCont m => ((forall i. a -> m i i o) -> m r j j) -> m r o a
Files
- Control/Monad/Indexed/Cont.hs +28/−6
- indexed-extras.cabal +5/−5
Control/Monad/Indexed/Cont.hs view
@@ -19,7 +19,7 @@ import Control.Applicative import Data.Pointed--- import Control.Monad.Trans+import qualified Control.Monad.Cont as Cont import Control.Monad.Identity import Control.Monad.Indexed import Control.Monad.State@@ -28,7 +28,7 @@ class IxMonad m => IxMonadCont m where reset :: m a o o -> m r r a- shift :: (forall i. (a -> m i i o) -> m r j j) -> m r o a+ shift :: ((forall i. a -> m i i o) -> m r j j) -> m r o a -- shift :: ((a -> m i i o) -> m r j j) -> m r o a newtype IxContT m r o a = IxContT { runIxContT :: (a -> m o) -> m r }@@ -52,6 +52,24 @@ reset e = IxContT $ \k -> runIxContT e return >>= k shift e = IxContT $ \k -> e (\a -> IxContT (\k' -> k a >>= k')) `runIxContT` return +callCC :: Monad m => ((forall i b. a -> IxContT m o i b) -> IxContT m r o a) -> IxContT m r o a+callCC f = shift (\k -> f (adapt k) >>>= k)+ where+ -- Both 'shift' and 'callCC' capture the current continuation up to the+ -- containing 'reset'; but where 'shift' continuations "return" the+ -- value "return"ed by the containing 'reset'-delimited computation,+ -- 'callCC' continuations never "return" but instead cause the+ -- containing 'reset' to "return" the captured continuation's result.+ --+ -- @adapt k x@ converts a 'shift'-style continuation to a+ -- 'callCC'-style continuation by using its "return"ed value directly+ -- as the final result.+ --+ -- @escape x@ ignores its continuation and provides x directly as the+ -- result.+ adapt k x = k x >>>= escape+ escape x = IxContT (\_k -> return x)+ instance Monad m => Functor (IxContT m i j) where fmap = imap @@ -66,8 +84,11 @@ return = ireturn m >>= k = ibind k m ---instance Monad m => MonadCont (IxContT m i i) where --- callCC f = shift (\k -> f k >>>= k)+instance Monad m => Cont.MonadCont (IxContT m i i) where + -- GHC < 7.10 needs some hand-holding to specialize the 'forall' in the+ -- continuation type. Otherwise we'd just have:+ -- callCC = callCC+ callCC f = callCC (\k -> f k) instance IxMonadTrans IxContT where ilift m = IxContT (m >>=)@@ -95,8 +116,9 @@ runIxCont_ :: IxCont r a a -> r runIxCont_ m = runIxCont m id --- instance MonadCont (IxCont i i) where --- callCC f = shift (\k -> f k >>>= k)+instance Cont.MonadCont (IxCont i i) where+ callCC f = IxCont (callCC (\q -> unwrapIxCont (f (IxCont . q))))+ where unwrapIxCont (IxCont x) = x instance Functor (IxCont i j) where fmap = imap
indexed-extras.cabal view
@@ -1,7 +1,7 @@ Name: indexed-extras-Version: 0.1.1+Version: 0.2 Synopsis: Indexed functors, monads and comonads that require extensions to Haskell98-Description: Indexed functors, monads and comonads that require extensiosn to Haskell98+Description: Indexed functors, monads and comonads that require extensions to Haskell98 License: BSD3 License-file: LICENSE Author: Edward A. Kmett@@ -28,9 +28,9 @@ Build-depends: base < 5, indexed < 0.2,- mtl < 2.2,- pointed < 2.2,- bifunctors < 0.2+ mtl < 2.3,+ pointed < 5.1,+ bifunctors < 5.4 ghc-options: -Wall Extensions: