packages feed

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 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: