deepcontrol 0.5.3.0 → 0.5.4.0
raw patch · 6 files changed
+78/−78 lines, 6 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- DeepControl.Monad.Trans: transroll2 :: (Monad m1, MonadTrans_ m2 t2) => m1 (m2 a) -> (t2 m1) a
- DeepControl.Monad.Trans: transroll3 :: (Monad m1, Monad (t2 m1), MonadTrans_ m2 t2, MonadTrans_ m3 t3) => m1 (m2 (m3 a)) -> t3 (t2 m1) a
- DeepControl.Monad.Trans: transroll4 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4) => m1 (m2 (m3 (m4 a))) -> t4 (t3 (t2 m1)) a
- DeepControl.Monad.Trans: transroll5 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), Monad (t4 (t3 (t2 m1))), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4, MonadTrans_ m5 t5) => m1 (m2 (m3 (m4 (m5 a)))) -> t5 (t4 (t3 (t2 m1))) a
- DeepControl.Monad.Trans: untransroll2 :: (Monad m1, MonadTrans_ m2 t2) => (t2 m1) a -> m1 (m2 a)
- DeepControl.Monad.Trans: untransroll3 :: (Monad m1, Monad (t2 m1), MonadTrans_ m2 t2, MonadTrans_ m3 t3) => t3 (t2 m1) a -> m1 (m2 (m3 a))
- DeepControl.Monad.Trans: untransroll4 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4) => t4 (t3 (t2 m1)) a -> m1 (m2 (m3 (m4 a)))
- DeepControl.Monad.Trans: untransroll5 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), Monad (t4 (t3 (t2 m1))), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4, MonadTrans_ m5 t5) => t5 (t4 (t3 (t2 m1))) a -> m1 (m2 (m3 (m4 (m5 a))))
- DeepControl.Monad.Trans.Identity: instance (Data.Foldable.Foldable f1, Data.Foldable.Foldable f2) => Data.Foldable.Foldable (DeepControl.Monad.Trans.Identity.IdentityT2 f1 f2)
- DeepControl.Monad.Trans.Identity: instance (Data.Foldable.Foldable f1, Data.Foldable.Foldable f2, Data.Foldable.Foldable f3) => Data.Foldable.Foldable (DeepControl.Monad.Trans.Identity.IdentityT3 f1 f2 f3)
- DeepControl.Monad.Trans.Identity: instance (Data.Foldable.Foldable f1, Data.Foldable.Foldable f2, Data.Foldable.Foldable f3, Data.Foldable.Foldable f4) => Data.Foldable.Foldable (DeepControl.Monad.Trans.Identity.IdentityT4 f1 f2 f3 f4)
- DeepControl.Monad.Trans.Identity: instance (Data.Foldable.Foldable f1, Data.Foldable.Foldable f2, Data.Foldable.Foldable f3, Data.Foldable.Foldable f4, Data.Foldable.Foldable f5) => Data.Foldable.Foldable (DeepControl.Monad.Trans.Identity.IdentityT5 f1 f2 f3 f4 f5)
- DeepControl.Monad.Trans.Identity: instance (Data.Traversable.Traversable f1, Data.Traversable.Traversable f2) => Data.Traversable.Traversable (DeepControl.Monad.Trans.Identity.IdentityT2 f1 f2)
- DeepControl.Monad.Trans.Identity: instance (Data.Traversable.Traversable f1, Data.Traversable.Traversable f2, Data.Traversable.Traversable f3) => Data.Traversable.Traversable (DeepControl.Monad.Trans.Identity.IdentityT3 f1 f2 f3)
- DeepControl.Monad.Trans.Identity: instance (Data.Traversable.Traversable f1, Data.Traversable.Traversable f2, Data.Traversable.Traversable f3, Data.Traversable.Traversable f4) => Data.Traversable.Traversable (DeepControl.Monad.Trans.Identity.IdentityT4 f1 f2 f3 f4)
- DeepControl.Monad.Trans.Identity: instance (Data.Traversable.Traversable f1, Data.Traversable.Traversable f2, Data.Traversable.Traversable f3, Data.Traversable.Traversable f4, Data.Traversable.Traversable f5) => Data.Traversable.Traversable (DeepControl.Monad.Trans.Identity.IdentityT5 f1 f2 f3 f4 f5)
- DeepControl.Monad.Trans.Identity: instance (GHC.Base.Functor f1, GHC.Base.Functor f2) => GHC.Base.Functor (DeepControl.Monad.Trans.Identity.IdentityT2 f1 f2)
- DeepControl.Monad.Trans.Identity: instance (GHC.Base.Functor f1, GHC.Base.Functor f2, GHC.Base.Functor f3) => GHC.Base.Functor (DeepControl.Monad.Trans.Identity.IdentityT3 f1 f2 f3)
- DeepControl.Monad.Trans.Identity: instance (GHC.Base.Functor f1, GHC.Base.Functor f2, GHC.Base.Functor f3, GHC.Base.Functor f4) => GHC.Base.Functor (DeepControl.Monad.Trans.Identity.IdentityT4 f1 f2 f3 f4)
- DeepControl.Monad.Trans.Identity: instance (GHC.Base.Functor f1, GHC.Base.Functor f2, GHC.Base.Functor f3, GHC.Base.Functor f4, GHC.Base.Functor f5) => GHC.Base.Functor (DeepControl.Monad.Trans.Identity.IdentityT5 f1 f2 f3 f4 f5)
- DeepControl.Monad.Trans.Identity: transrollI2 :: (Monad m1, MonadTrans_ m2 t2) => IdentityT2 m1 m2 a -> IdentityT (t2 m1) a
- DeepControl.Monad.Trans.Identity: transrollI3 :: (Monad m1, Monad (t2 m1), MonadTrans_ m2 t2, MonadTrans_ m3 t3) => IdentityT3 m1 m2 m3 a -> IdentityT (t3 (t2 m1)) a
- DeepControl.Monad.Trans.Identity: transrollI4 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4) => IdentityT4 m1 m2 m3 m4 a -> IdentityT (t4 (t3 (t2 m1))) a
- DeepControl.Monad.Trans.Identity: transrollI5 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), Monad (t4 (t3 (t2 m1))), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4, MonadTrans_ m5 t5) => IdentityT5 m1 m2 m3 m4 m5 a -> IdentityT (t5 (t4 (t3 (t2 m1)))) a
- DeepControl.Monad.Trans.Identity: untransrollI2 :: (Monad m1, MonadTrans_ m2 t2) => IdentityT (t2 m1) a -> IdentityT2 m1 m2 a
- DeepControl.Monad.Trans.Identity: untransrollI3 :: (Monad m1, Monad (t2 m1), MonadTrans_ m2 t2, MonadTrans_ m3 t3) => IdentityT (t3 (t2 m1)) a -> IdentityT3 m1 m2 m3 a
- DeepControl.Monad.Trans.Identity: untransrollI4 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4) => IdentityT (t4 (t3 (t2 m1))) a -> IdentityT4 m1 m2 m3 m4 a
- DeepControl.Monad.Trans.Identity: untransrollI5 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), Monad (t4 (t3 (t2 m1))), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4, MonadTrans_ m5 t5) => IdentityT (t5 (t4 (t3 (t2 m1)))) a -> IdentityT5 m1 m2 m3 m4 m5 a
+ DeepControl.Applicative: infixl 3 *----|
+ DeepControl.Applicative: infixl 4 |$>>>>>
+ DeepControl.Applicative: infixl 5 ****->
+ DeepControl.Applicative: infixl 6 ***-*
+ DeepControl.Monad: infixl 1 >-
+ DeepControl.Monad: infixr 1 >>>>>=>
+ DeepControl.Monad.Morph: infixl 4 |<<<<<|
+ DeepControl.Monad.Morph: infixl 5 |***-*|
+ DeepControl.Monad.Morph: infixr 3 |>>>>>~
+ DeepControl.Monad.Morph: infixr 4 |>>>>>=
+ DeepControl.Monad.Trans: transfold2 :: (Monad m1, MonadTrans_ m2 t2) => m1 (m2 a) -> (t2 m1) a
+ DeepControl.Monad.Trans: transfold3 :: (Monad m1, Monad (t2 m1), MonadTrans_ m2 t2, MonadTrans_ m3 t3) => m1 (m2 (m3 a)) -> t3 (t2 m1) a
+ DeepControl.Monad.Trans: transfold4 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4) => m1 (m2 (m3 (m4 a))) -> t4 (t3 (t2 m1)) a
+ DeepControl.Monad.Trans: transfold5 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), Monad (t4 (t3 (t2 m1))), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4, MonadTrans_ m5 t5) => m1 (m2 (m3 (m4 (m5 a)))) -> t5 (t4 (t3 (t2 m1))) a
+ DeepControl.Monad.Trans: untransfold2 :: (Monad m1, MonadTrans_ m2 t2) => (t2 m1) a -> m1 (m2 a)
+ DeepControl.Monad.Trans: untransfold3 :: (Monad m1, Monad (t2 m1), MonadTrans_ m2 t2, MonadTrans_ m3 t3) => t3 (t2 m1) a -> m1 (m2 (m3 a))
+ DeepControl.Monad.Trans: untransfold4 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4) => t4 (t3 (t2 m1)) a -> m1 (m2 (m3 (m4 a)))
+ DeepControl.Monad.Trans: untransfold5 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), Monad (t4 (t3 (t2 m1))), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4, MonadTrans_ m5 t5) => t5 (t4 (t3 (t2 m1))) a -> m1 (m2 (m3 (m4 (m5 a))))
+ DeepControl.Monad.Trans.Identity: infixl 3 ****-:
+ DeepControl.Monad.Trans.Identity: instance (Data.Foldable.Foldable f2, Data.Foldable.Foldable f1) => Data.Foldable.Foldable (DeepControl.Monad.Trans.Identity.IdentityT2 f1 f2)
+ DeepControl.Monad.Trans.Identity: instance (Data.Foldable.Foldable f3, Data.Foldable.Foldable f2, Data.Foldable.Foldable f1) => Data.Foldable.Foldable (DeepControl.Monad.Trans.Identity.IdentityT3 f1 f2 f3)
+ DeepControl.Monad.Trans.Identity: instance (Data.Foldable.Foldable f4, Data.Foldable.Foldable f3, Data.Foldable.Foldable f2, Data.Foldable.Foldable f1) => Data.Foldable.Foldable (DeepControl.Monad.Trans.Identity.IdentityT4 f1 f2 f3 f4)
+ DeepControl.Monad.Trans.Identity: instance (Data.Foldable.Foldable f5, Data.Foldable.Foldable f4, Data.Foldable.Foldable f3, Data.Foldable.Foldable f2, Data.Foldable.Foldable f1) => Data.Foldable.Foldable (DeepControl.Monad.Trans.Identity.IdentityT5 f1 f2 f3 f4 f5)
+ DeepControl.Monad.Trans.Identity: instance (Data.Traversable.Traversable f2, Data.Traversable.Traversable f1) => Data.Traversable.Traversable (DeepControl.Monad.Trans.Identity.IdentityT2 f1 f2)
+ DeepControl.Monad.Trans.Identity: instance (Data.Traversable.Traversable f3, Data.Traversable.Traversable f2, Data.Traversable.Traversable f1) => Data.Traversable.Traversable (DeepControl.Monad.Trans.Identity.IdentityT3 f1 f2 f3)
+ DeepControl.Monad.Trans.Identity: instance (Data.Traversable.Traversable f4, Data.Traversable.Traversable f3, Data.Traversable.Traversable f2, Data.Traversable.Traversable f1) => Data.Traversable.Traversable (DeepControl.Monad.Trans.Identity.IdentityT4 f1 f2 f3 f4)
+ DeepControl.Monad.Trans.Identity: instance (Data.Traversable.Traversable f5, Data.Traversable.Traversable f4, Data.Traversable.Traversable f3, Data.Traversable.Traversable f2, Data.Traversable.Traversable f1) => Data.Traversable.Traversable (DeepControl.Monad.Trans.Identity.IdentityT5 f1 f2 f3 f4 f5)
+ DeepControl.Monad.Trans.Identity: instance (GHC.Base.Functor f2, GHC.Base.Functor f1) => GHC.Base.Functor (DeepControl.Monad.Trans.Identity.IdentityT2 f1 f2)
+ DeepControl.Monad.Trans.Identity: instance (GHC.Base.Functor f3, GHC.Base.Functor f2, GHC.Base.Functor f1) => GHC.Base.Functor (DeepControl.Monad.Trans.Identity.IdentityT3 f1 f2 f3)
+ DeepControl.Monad.Trans.Identity: instance (GHC.Base.Functor f4, GHC.Base.Functor f3, GHC.Base.Functor f2, GHC.Base.Functor f1) => GHC.Base.Functor (DeepControl.Monad.Trans.Identity.IdentityT4 f1 f2 f3 f4)
+ DeepControl.Monad.Trans.Identity: instance (GHC.Base.Functor f5, GHC.Base.Functor f4, GHC.Base.Functor f3, GHC.Base.Functor f2, GHC.Base.Functor f1) => GHC.Base.Functor (DeepControl.Monad.Trans.Identity.IdentityT5 f1 f2 f3 f4 f5)
+ DeepControl.Monad.Trans.Identity: transfoldI2 :: (Monad m1, MonadTrans_ m2 t2) => IdentityT2 m1 m2 a -> IdentityT (t2 m1) a
+ DeepControl.Monad.Trans.Identity: transfoldI3 :: (Monad m1, Monad (t2 m1), MonadTrans_ m2 t2, MonadTrans_ m3 t3) => IdentityT3 m1 m2 m3 a -> IdentityT (t3 (t2 m1)) a
+ DeepControl.Monad.Trans.Identity: transfoldI4 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4) => IdentityT4 m1 m2 m3 m4 a -> IdentityT (t4 (t3 (t2 m1))) a
+ DeepControl.Monad.Trans.Identity: transfoldI5 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), Monad (t4 (t3 (t2 m1))), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4, MonadTrans_ m5 t5) => IdentityT5 m1 m2 m3 m4 m5 a -> IdentityT (t5 (t4 (t3 (t2 m1)))) a
+ DeepControl.Monad.Trans.Identity: untransfoldI2 :: (Monad m1, MonadTrans_ m2 t2) => IdentityT (t2 m1) a -> IdentityT2 m1 m2 a
+ DeepControl.Monad.Trans.Identity: untransfoldI3 :: (Monad m1, Monad (t2 m1), MonadTrans_ m2 t2, MonadTrans_ m3 t3) => IdentityT (t3 (t2 m1)) a -> IdentityT3 m1 m2 m3 a
+ DeepControl.Monad.Trans.Identity: untransfoldI4 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4) => IdentityT (t4 (t3 (t2 m1))) a -> IdentityT4 m1 m2 m3 m4 a
+ DeepControl.Monad.Trans.Identity: untransfoldI5 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), Monad (t4 (t3 (t2 m1))), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4, MonadTrans_ m5 t5) => IdentityT (t5 (t4 (t3 (t2 m1)))) a -> IdentityT5 m1 m2 m3 m4 m5 a
Files
- DeepControl/Monad/Trans.hs +30/−30
- DeepControl/Monad/Trans/Identity.hs +20/−20
- README.md +17/−17
- deepcontrol.cabal +3/−3
- test/unit_Monad-Level2.hs +5/−5
- test/unit_MonadTrans-ackermann.hs +3/−3
DeepControl/Monad/Trans.hs view
@@ -23,19 +23,19 @@ -- * Level-2 -- ** trans-roll- transroll2, untransroll2,+ transfold2, untransfold2, -- * Level-3 -- ** trans-roll- transroll3, untransroll3,+ transfold3, untransfold3, -- * Level-4 -- ** trans-roll- transroll4, untransroll4,+ transfold4, untransfold4, -- * Level-5 -- ** trans-roll- transroll5, untransroll5,+ transfold5, untransfold5, -- * Level-2 example -- $Example_Level2@@ -64,7 +64,7 @@ ---------------------------------------------------------------------- -- Level-1 --- | Required only for transroll+-- | Required only for transfold class (Monad m, MonadTrans t) => MonadTrans_ m t | m -> t, t -> m where trans :: (Monad n) => n (m a) -> t n a untrans :: (Monad n) => t n a -> n (m a)@@ -96,61 +96,61 @@ -- | ----- >>> transroll2 $ [Just 1]+-- >>> transfold2 $ [Just 1] -- MaybeT [Just 1] ----- >>> transroll2 $ Just [1]+-- >>> transfold2 $ Just [1] -- ListT (Just [1]) ---transroll2 :: (Monad m1, MonadTrans_ m2 t2) => m1 (m2 a) -> (t2 m1) a-transroll2 = trans+transfold2 :: (Monad m1, MonadTrans_ m2 t2) => m1 (m2 a) -> (t2 m1) a+transfold2 = trans -- | ----- >>> untransroll2 $ MaybeT [Just 1]+-- >>> untransfold2 $ MaybeT [Just 1] -- [Just 1] ----- >>> untransroll2 $ ListT (Just [1])+-- >>> untransfold2 $ ListT (Just [1]) -- Just [1] ---untransroll2 :: (Monad m1, MonadTrans_ m2 t2) => (t2 m1) a -> m1 (m2 a)-untransroll2 = untrans+untransfold2 :: (Monad m1, MonadTrans_ m2 t2) => (t2 m1) a -> m1 (m2 a)+untransfold2 = untrans ---------------------------------------------------------------------- -- Level-3 -- | ----- >>> transroll3 $ ExceptT (Identity (Right [Just 1]))+-- >>> transfold3 $ ExceptT (Identity (Right [Just 1])) -- MaybeT (ListT (ExceptT (Identity (Right [Just 1])))) ---transroll3 :: (Monad m1, Monad (t2 m1), MonadTrans_ m2 t2, MonadTrans_ m3 t3) => m1 (m2 (m3 a)) -> t3 (t2 m1) a-transroll3 = trans . trans+transfold3 :: (Monad m1, Monad (t2 m1), MonadTrans_ m2 t2, MonadTrans_ m3 t3) => m1 (m2 (m3 a)) -> t3 (t2 m1) a+transfold3 = trans . trans -- | ----- >>> untransroll3 $ MaybeT (ListT (ExceptT (Identity (Right [Just 1]))))+-- >>> untransfold3 $ MaybeT (ListT (ExceptT (Identity (Right [Just 1])))) -- ExceptT (Identity (Right [Just 1])) ---untransroll3 :: (Monad m1, Monad (t2 m1), MonadTrans_ m2 t2, MonadTrans_ m3 t3) => t3 (t2 m1) a -> m1 (m2 (m3 a))-untransroll3 = untrans . untrans+untransfold3 :: (Monad m1, Monad (t2 m1), MonadTrans_ m2 t2, MonadTrans_ m3 t3) => t3 (t2 m1) a -> m1 (m2 (m3 a))+untransfold3 = untrans . untrans ---------------------------------------------------------------------- -- Level-4 -transroll4 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4) => m1 (m2 (m3 (m4 a))) -> t4 (t3 (t2 m1)) a-transroll4 = trans . trans . trans-untransroll4 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4) => t4 (t3 (t2 m1)) a -> m1 (m2 (m3 (m4 a)))-untransroll4 = untrans . untrans . untrans+transfold4 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4) => m1 (m2 (m3 (m4 a))) -> t4 (t3 (t2 m1)) a+transfold4 = trans . trans . trans+untransfold4 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4) => t4 (t3 (t2 m1)) a -> m1 (m2 (m3 (m4 a)))+untransfold4 = untrans . untrans . untrans ---------------------------------------------------------------------- -- Level-4 -transroll5 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), Monad (t4 (t3 (t2 m1))), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4, MonadTrans_ m5 t5) => +transfold5 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), Monad (t4 (t3 (t2 m1))), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4, MonadTrans_ m5 t5) => m1 (m2 (m3 (m4 (m5 a)))) -> t5 (t4 (t3 (t2 m1))) a-transroll5 = trans . trans . trans . trans-untransroll5 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), Monad (t4 (t3 (t2 m1))), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4, MonadTrans_ m5 t5) => +transfold5 = trans . trans . trans . trans+untransfold5 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), Monad (t4 (t3 (t2 m1))), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4, MonadTrans_ m5 t5) => t5 (t4 (t3 (t2 m1))) a -> m1 (m2 (m3 (m4 (m5 a))))-untransroll5 = untrans . untrans . untrans . untrans+untransfold5 = untrans . untrans . untrans . untrans ---------------------------------------------------------------------- -- Examples@@ -162,7 +162,7 @@ >import DeepControl.Traversable (sink) >import DeepControl.Monad ((>-)) >import DeepControl.Monad.Morph ((|*|), (|>|))->import DeepControl.Monad.Trans (transroll2, untransroll2)+>import DeepControl.Monad.Trans (transfold2, untransfold2) >import DeepControl.Monad.Trans.Identity (Identity(..), IdentityT(..), IdentityT2(..)) >import Control.Monad.Reader >import Control.Monad.Trans.Maybe@@ -195,11 +195,11 @@ > >ackermann' :: Int -> Int -> > ReaderT TimeLimit (MaybeT IO) Int -- ReaderT-MaybeT-IO monad->ackermann' x y = (transroll2 . runIdentityT2) |>| ackermann x y -- You can get usual ReaderT-MaybeT-IO function from ReaderT-IdentityT2-IO-Maybe function+>ackermann' x y = (transfold2 . runIdentityT2) |>| ackermann x y -- You can get usual ReaderT-MaybeT-IO function from ReaderT-IdentityT2-IO-Maybe function > >ackermann'' :: Int -> Int -> > ReaderT TimeLimit (IdentityT2 IO Maybe) Int -- ReaderT-IdentityT2-IO-Maybe monad->ackermann'' x y = (IdentityT2 . untransroll2) |>| ackermann' x y -- You can get ReaderT-IdentityT2-IO-Maybe function from usual ReaderT-MaybeT-IO function+>ackermann'' x y = (IdentityT2 . untransfold2) |>| ackermann' x y -- You can get ReaderT-IdentityT2-IO-Maybe function from usual ReaderT-MaybeT-IO function -}
DeepControl/Monad/Trans/Identity.hs view
@@ -28,7 +28,7 @@ (**:), (-*:), (*-:), -- ** identity-roll - transrollI2, untransrollI2,+ transfoldI2, untransfoldI2, -- ** lift mapIdentityT2, liftCallCC2, liftCatch2, @@ -39,7 +39,7 @@ (--*:), (-*-:), (*--:), (-**:), (*-*:), (**-:), -- ** identity-roll - transrollI3, untransrollI3,+ transfoldI3, untransfoldI3, -- ** lift mapIdentityT3, liftCallCC3, liftCatch3, @@ -51,7 +51,7 @@ (--**:), (-*-*:), (*--*:), (*-*-:), (-**-:), (**--:), (-***:), (*-**:), (**-*:), (***-:), -- ** identity-roll - transrollI4, untransrollI4,+ transfoldI4, untransfoldI4, -- ** lift mapIdentityT4, liftCallCC4, liftCatch4, @@ -64,7 +64,7 @@ (--***:), (-*-**:), (*--**:), (*-*-*:), (-**-*:), (**--*:), (**-*-:), (*-**-:), (-***-:), (***--:), (-****:), (*-***:), (**-**:), (***-*:), (****-:), -- ** identity-roll - transrollI5, untransrollI5,+ transfoldI5, untransfoldI5, -- ** lift mapIdentityT5, liftCallCC5, liftCatch5, @@ -126,10 +126,10 @@ instance (MonadIO m1, Monad m1, Monad m2, Traversable m2) => MonadIO (IdentityT2 m1 m2) where liftIO = IdentityT2 . (-*) . liftIO -transrollI2 :: (Monad m1, MonadTrans_ m2 t2) => IdentityT2 m1 m2 a -> IdentityT (t2 m1) a-transrollI2 = IdentityT . transroll2 . runIdentityT2-untransrollI2 :: (Monad m1, MonadTrans_ m2 t2) => IdentityT (t2 m1) a -> IdentityT2 m1 m2 a-untransrollI2 = IdentityT2 . untransroll2 . runIdentityT+transfoldI2 :: (Monad m1, MonadTrans_ m2 t2) => IdentityT2 m1 m2 a -> IdentityT (t2 m1) a+transfoldI2 = IdentityT . transfold2 . runIdentityT2+untransfoldI2 :: (Monad m1, MonadTrans_ m2 t2) => IdentityT (t2 m1) a -> IdentityT2 m1 m2 a+untransfoldI2 = IdentityT2 . untransfold2 . runIdentityT lift2IdentityT2 :: (m1 (m2 a) -> n1 (n2 b) -> p1 (p2 c)) -> IdentityT2 m1 m2 a -> IdentityT2 n1 n2 b -> IdentityT2 p1 p2 c lift2IdentityT2 f a b = IdentityT2 (f (runIdentityT2 a) (runIdentityT2 b))@@ -199,10 +199,10 @@ instance (MonadIO m1, Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => MonadIO (IdentityT3 m1 m2 m3) where liftIO = IdentityT3 . (-**) . liftIO -transrollI3 :: (Monad m1, Monad (t2 m1), MonadTrans_ m2 t2, MonadTrans_ m3 t3) => IdentityT3 m1 m2 m3 a -> IdentityT (t3 (t2 m1)) a-transrollI3 = IdentityT . transroll3 . runIdentityT3-untransrollI3 :: (Monad m1, Monad (t2 m1), MonadTrans_ m2 t2, MonadTrans_ m3 t3) => IdentityT (t3 (t2 m1)) a -> IdentityT3 m1 m2 m3 a-untransrollI3 = IdentityT3 . untransroll3 . runIdentityT+transfoldI3 :: (Monad m1, Monad (t2 m1), MonadTrans_ m2 t2, MonadTrans_ m3 t3) => IdentityT3 m1 m2 m3 a -> IdentityT (t3 (t2 m1)) a+transfoldI3 = IdentityT . transfold3 . runIdentityT3+untransfoldI3 :: (Monad m1, Monad (t2 m1), MonadTrans_ m2 t2, MonadTrans_ m3 t3) => IdentityT (t3 (t2 m1)) a -> IdentityT3 m1 m2 m3 a+untransfoldI3 = IdentityT3 . untransfold3 . runIdentityT lift2IdentityT3 :: (m1 (m2 (m3 a)) -> n1 (n2 (n3 b)) -> p1 (p2 (p3 c))) -> IdentityT3 m1 m2 m3 a -> IdentityT3 n1 n2 n3 b -> IdentityT3 p1 p2 p3 c lift2IdentityT3 f a b = IdentityT3 (f (runIdentityT3 a) (runIdentityT3 b))@@ -259,10 +259,10 @@ instance (MonadIO m1, Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => MonadIO (IdentityT4 m1 m2 m3 m4) where liftIO = IdentityT4 . (-***) . liftIO -transrollI4 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4) => IdentityT4 m1 m2 m3 m4 a -> IdentityT (t4 (t3 (t2 m1))) a-transrollI4 = IdentityT . transroll4 . runIdentityT4-untransrollI4 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4) => IdentityT (t4 (t3 (t2 m1))) a -> IdentityT4 m1 m2 m3 m4 a-untransrollI4 = IdentityT4 . untransroll4 . runIdentityT+transfoldI4 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4) => IdentityT4 m1 m2 m3 m4 a -> IdentityT (t4 (t3 (t2 m1))) a+transfoldI4 = IdentityT . transfold4 . runIdentityT4+untransfoldI4 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4) => IdentityT (t4 (t3 (t2 m1))) a -> IdentityT4 m1 m2 m3 m4 a+untransfoldI4 = IdentityT4 . untransfold4 . runIdentityT lift2IdentityT4 :: (m1 (m2 (m3 (m4 a))) -> n1 (n2 (n3 (n4 b))) -> p1 (p2 (p3 (p4 c)))) -> IdentityT4 m1 m2 m3 m4 a -> IdentityT4 n1 n2 n3 n4 b -> IdentityT4 p1 p2 p3 p4 c lift2IdentityT4 f a b = IdentityT4 (f (runIdentityT4 a) (runIdentityT4 b))@@ -337,12 +337,12 @@ instance (MonadIO m1, Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => MonadIO (IdentityT5 m1 m2 m3 m4 m5) where liftIO = IdentityT5 . (-****) . liftIO -transrollI5 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), Monad (t4 (t3 (t2 m1))), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4, MonadTrans_ m5 t5) => +transfoldI5 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), Monad (t4 (t3 (t2 m1))), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4, MonadTrans_ m5 t5) => IdentityT5 m1 m2 m3 m4 m5 a -> IdentityT (t5 (t4 (t3 (t2 m1)))) a-transrollI5 = IdentityT . transroll5 . runIdentityT5-untransrollI5 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), Monad (t4 (t3 (t2 m1))), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4, MonadTrans_ m5 t5) => +transfoldI5 = IdentityT . transfold5 . runIdentityT5+untransfoldI5 :: (Monad m1, Monad (t2 m1), Monad (t3 (t2 m1)), Monad (t4 (t3 (t2 m1))), MonadTrans_ m2 t2, MonadTrans_ m3 t3, MonadTrans_ m4 t4, MonadTrans_ m5 t5) => IdentityT (t5 (t4 (t3 (t2 m1)))) a -> IdentityT5 m1 m2 m3 m4 m5 a-untransrollI5 = IdentityT5 . untransroll5 . runIdentityT+untransfoldI5 = IdentityT5 . untransfold5 . runIdentityT lift2IdentityT5 :: (m1 (m2 (m3 (m4 (m5 a)))) -> n1 (n2 (n3 (n4 (n5 b)))) -> p1 (p2 (p3 (p4 (p5 c))))) -> IdentityT5 m1 m2 m3 m4 m5 a -> IdentityT5 n1 n2 n3 n4 n5 b -> IdentityT5 p1 p2 p3 p4 p5 c lift2IdentityT5 f a b = IdentityT5 (f (runIdentityT5 a) (runIdentityT5 b))
README.md view
@@ -1,10 +1,10 @@ # deepcontrol -A Haskell library that enables more deeper level style programming than the usual Control.xxx modules express, especially for Applicative and Monad.+A Haskell library that provides more deeper level style of programming than the usual Control.Applicative and Control.Monad modules express. ## Examples -### [Applicative](https://hackage.haskell.org/package/deepcontrol-0.5.3.0/docs/DeepControl-Applicative.html)+### [Applicative](https://hackage.haskell.org/package/deepcontrol-0.5.4.0/docs/DeepControl-Applicative.html) This module enables you to program in applicative style for more deeper level than the usual Applicative module expresses. You would soon realize exactly what more deeper level means by reading the example codes below in order.@@ -182,7 +182,7 @@ Work well likewise. -### [Monad](https://hackage.haskell.org/package/deepcontrol-0.5.3.0/docs/DeepControl-Monad.html)+### [Monad](https://hackage.haskell.org/package/deepcontrol-0.5.4.0/docs/DeepControl-Monad.html) This module enables you to program in Monad for more deeper level than the usual Monad module expresses. You would soon realize exactly what more deeper level means by reading the example codes below in order.@@ -202,7 +202,7 @@ -- 7 ``` -#### [Traversable](https://hackage.haskell.org/package/deepcontrol-0.5.3.0/docs/DeepControl-Traversable.html)+#### [Traversable](https://hackage.haskell.org/package/deepcontrol-0.5.4.0/docs/DeepControl-Traversable.html) Identity, List, Maybe, Either, Except and Writer monads are sinkable monads. @@ -286,7 +286,7 @@ Work well likewise. -### [Monad-Transformer](https://hackage.haskell.org/package/deepcontrol-0.5.3.0/docs/DeepControl-Monad-Trans.html)+### [Monad-Transformer](https://hackage.haskell.org/package/deepcontrol-0.5.4.0/docs/DeepControl-Monad-Trans.html) #### Level-2 @@ -297,7 +297,7 @@ import DeepControl.Traversable (sink) import DeepControl.Monad ((>-)) import DeepControl.Monad.Morph ((|*|), (|>|))-import DeepControl.Monad.Trans (transroll2, untransroll2)+import DeepControl.Monad.Trans (transfold2, untransfold2) import DeepControl.Monad.Trans.Identity (Identity(..), IdentityT(..), IdentityT2(..)) import Control.Monad.Reader import Control.Monad.Trans.Maybe@@ -331,44 +331,44 @@ ackermann' :: Int -> Int -> ReaderT TimeLimit (MaybeT IO) Int -- ReaderT-MaybeT-IO monad-ackermann' x y = (transroll2 . runIdentityT2) |>| ackermann x y -- You can get usual ReaderT-MaybeT-IO function from ReaderT-IdentityT2-IO-Maybe function+ackermann' x y = (transfold2 . runIdentityT2) |>| ackermann x y -- You can get usual ReaderT-MaybeT-IO function from ReaderT-IdentityT2-IO-Maybe function -- (|>|) is the level-1 trans-map function, analogous to (|$>) ackermann'' :: Int -> Int -> ReaderT TimeLimit (IdentityT2 IO Maybe) Int -- ReaderT-IdentityT2-IO-Maybe monad-ackermann'' x y = (IdentityT2 . untransroll2) |>| ackermann' x y -- You can get ReaderT-IdentityT2-IO-Maybe function from usual ReaderT-MaybeT-IO function+ackermann'' x y = (IdentityT2 . untransfold2) |>| ackermann' x y -- You can get ReaderT-IdentityT2-IO-Maybe function from usual ReaderT-MaybeT-IO function ``` #### Level-3, Level-4 and Level-5 Work well likewise. -transroll and untransroll:+transfold and untransfold: Prelude> :m DeepControl.Monad.Trans > :m + Control.Monad.Trans.List Control.Monad.Trans.Maybe > :m + DeepControl.Monad.Trans.Identity DeepControl.Monad.Trans.Except DeepControl.Monad.Trans.Writer - > transroll3 $ ExceptT (Identity (Right [Just 1])) -- note: type Except e = ExceptT e Identity+ > transfold3 $ ExceptT (Identity (Right [Just 1])) -- note: type Except e = ExceptT e Identity MaybeT (ListT (ExceptT (Identity (Right [Just 1])))) > :t ExceptT (Identity (Right [Just 1])) ExceptT (Identity (Right [Just 1])) :: Num a => ExceptT e Identity [Maybe a]- > :t transroll3 $ ExceptT (Identity (Right [Just 1]))- transroll3 $ ExceptT (Identity (Right [Just 1]))+ > :t transfold3 $ ExceptT (Identity (Right [Just 1]))+ transfold3 $ ExceptT (Identity (Right [Just 1])) :: Num a => MaybeT (ListT (ExceptT e Identity)) a - > untransroll3 $ MaybeT (ListT (ExceptT (Identity (Right [Just 1]))))+ > untransfold3 $ MaybeT (ListT (ExceptT (Identity (Right [Just 1])))) ExceptT (Identity (Right [Just 1])) > :t MaybeT (ListT (ExceptT (Identity (Right [Just 1])))) MaybeT (ListT (ExceptT (Identity (Right [Just 1])))) :: Num a => MaybeT (ListT (ExceptT e Identity)) a- > :t untransroll3 $ MaybeT (ListT (ExceptT (Identity (Right [Just 1]))))- untransroll3 $ MaybeT (ListT (ExceptT (Identity (Right [Just 1]))))+ > :t untransfold3 $ MaybeT (ListT (ExceptT (Identity (Right [Just 1]))))+ untransfold3 $ MaybeT (ListT (ExceptT (Identity (Right [Just 1])))) :: Num a => ExceptT e Identity [Maybe a] -### [Monad-Morph](https://hackage.haskell.org/package/deepcontrol-0.5.3.0/docs/DeepControl-Monad-Morph.html)+### [Monad-Morph](https://hackage.haskell.org/package/deepcontrol-0.5.4.0/docs/DeepControl-Monad-Morph.html) #### SinkT @@ -497,4 +497,4 @@ Work well likewise. -### [Arrow](https://hackage.haskell.org/package/deepcontrol-0.5.3.0/docs/DeepControl-Arrow.html)+### [Arrow](https://hackage.haskell.org/package/deepcontrol-0.5.4.0/docs/DeepControl-Arrow.html)
deepcontrol.cabal view
@@ -1,7 +1,7 @@ name: deepcontrol-version: 0.5.3.0-synopsis: Provide more deeper level style of programming than the usual Control.xxx modules express-description: This module provides more deeper level style of programming than the usual Control.xxx modules express, especially for Applicative and Monad.+version: 0.5.4.0+synopsis: Provide deep level programming style for Applicative and Monad+description: This module provides more deeper level style of programming than the usual Applicative and Monad modules express. license: BSD3 license-file: LICENSE author: KONISHI Yohsuke
test/unit_Monad-Level2.hs view
@@ -255,10 +255,10 @@ -- StateT-IdentityT-MaybeT-IO popSIM :: StateT [a] (MaybeT IO) a-popSIM = (transroll2 . runIdentityT2) |>| popSI2+popSIM = (transfold2 . runIdentityT2) |>| popSI2 polandSIM :: String -> StateT [Double] (MaybeT IO) Double-polandSIM s = (transroll2 . runIdentityT2) |>| polandSI2 s+polandSIM s = (transfold2 . runIdentityT2) |>| polandSI2 s poland_calcSIM :: [String] -> IO (Maybe (Double, [Double])) poland_calcSIM xs = (sinkmap polandSIM xs >> popSIM) >- \x -> runStateT x []@@ -328,11 +328,11 @@ -- StateT-IdentityT3-IO-Except-Maybe pushSI3 :: a -> StateT [a] (IdentityT3 IO (Except ()) Maybe) a-pushSI3 x = (IdentityT3 . untransroll3 . runIdentityT) |>| pushSIME x+pushSI3 x = (IdentityT3 . untransfold3 . runIdentityT) |>| pushSIME x popSI3 :: StateT [a] (IdentityT3 IO (Except ()) Maybe) a-popSI3 = (IdentityT3 . untransroll3 . runIdentityT) |>| popSIME+popSI3 = (IdentityT3 . untransfold3 . runIdentityT) |>| popSIME polandSI3 :: String -> StateT [Double] (IdentityT3 IO (Except ()) Maybe) Double-polandSI3 x = (IdentityT3 . untransroll3 . runIdentityT) |>| polandSIME x+polandSI3 x = (IdentityT3 . untransfold3 . runIdentityT) |>| polandSIME x poland_calcSI3 :: [String] -> IO (Either () (Maybe (Double, [Double]))) poland_calcSI3 xs = (sinkmap polandSI3 xs >> popSI3) >- \x -> runStateT x []
test/unit_MonadTrans-ackermann.hs view
@@ -4,7 +4,7 @@ import DeepControl.Traversable (sink) import DeepControl.Monad ((>-)) import DeepControl.Monad.Morph ((|*|), (|>|))-import DeepControl.Monad.Trans (transroll2, untransroll2)+import DeepControl.Monad.Trans (transfold2, untransfold2) import DeepControl.Monad.Trans.Identity (Identity(..), IdentityT(..), IdentityT2(..)) import Control.Monad.Reader import Control.Monad.Trans.Maybe@@ -37,7 +37,7 @@ ackermann' :: Int -> Int -> ReaderT TimeLimit (MaybeT IO) Int -- ReaderT-MaybeT-IO monad-ackermann' x y = (transroll2 . runIdentityT2) |>| ackermann x y -- You can get usual ReaderT-MaybeT-IO function from ReaderT-IdentityT2-IO-Maybe function+ackermann' x y = (transfold2 . runIdentityT2) |>| ackermann x y -- You can get usual ReaderT-MaybeT-IO function from ReaderT-IdentityT2-IO-Maybe function calc_ackermann' :: TimeLimit -> Int -> Int -> IO (Maybe Int) calc_ackermann' timelimit x y = ackermann' x y >- \r -> runReaderT r timelimit@@ -45,7 +45,7 @@ ackermann'' :: Int -> Int -> ReaderT TimeLimit (IdentityT2 IO Maybe) Int -- ReaderT-IdentityT2-IO-Maybe monad-ackermann'' x y = (IdentityT2 . untransroll2) |>| ackermann' x y -- You can get ReaderT-IdentityT2-IO-Maybe function from usual ReaderT-MaybeT-IO function+ackermann'' x y = (IdentityT2 . untransfold2) |>| ackermann' x y -- You can get ReaderT-IdentityT2-IO-Maybe function from usual ReaderT-MaybeT-IO function calc_ackermann'' :: TimeLimit -> Int -> Int -> IO (Maybe Int) calc_ackermann'' timelimit x y = ackermann'' x y >- \r -> runReaderT r timelimit