packages feed

List 0.3.0 → 0.4.0

raw patch · 3 files changed

+21/−46 lines, 3 filesdep +transformersdep −mtlPVP ok

version bump matches the API change (PVP)

Dependencies added: transformers

Dependencies removed: mtl

API changes (from Hackage documentation)

- Control.Monad.ListT: instance (Eq (m (ListItem (ListT m) a))) => Eq (ListT m a)
- Control.Monad.ListT: instance (Monad m) => Applicative (ListT m)
- Control.Monad.ListT: instance (Monad m) => Functor (ListT m)
- Control.Monad.ListT: instance (Monad m) => List (ListT m)
- Control.Monad.ListT: instance (Monad m) => Monad (ListT m)
- Control.Monad.ListT: instance (Monad m) => MonadPlus (ListT m)
- Control.Monad.ListT: instance (Monad m) => Monoid (ListT m a)
- Control.Monad.ListT: instance (MonadError e m) => MonadError e (ListT m)
- Control.Monad.ListT: instance (MonadIO m) => MonadIO (ListT m)
- Control.Monad.ListT: instance (MonadReader s m) => MonadReader s (ListT m)
- Control.Monad.ListT: instance (MonadState s m) => MonadState s (ListT m)
- Control.Monad.ListT: instance (Ord (m (ListItem (ListT m) a))) => Ord (ListT m a)
- Control.Monad.ListT: instance (Read (m (ListItem (ListT m) a))) => Read (ListT m a)
- Control.Monad.ListT: instance (Show (m (ListItem (ListT m) a))) => Show (ListT m a)
- Data.List.Class: instance (Functor m) => Functor (ListItem m)
+ Control.Monad.ListT: instance Eq (m (ListItem (ListT m) a)) => Eq (ListT m a)
+ Control.Monad.ListT: instance Monad m => Applicative (ListT m)
+ Control.Monad.ListT: instance Monad m => Functor (ListT m)
+ Control.Monad.ListT: instance Monad m => List (ListT m)
+ Control.Monad.ListT: instance Monad m => Monad (ListT m)
+ Control.Monad.ListT: instance Monad m => MonadPlus (ListT m)
+ Control.Monad.ListT: instance Monad m => Monoid (ListT m a)
+ Control.Monad.ListT: instance MonadIO m => MonadIO (ListT m)
+ Control.Monad.ListT: instance Ord (m (ListItem (ListT m) a)) => Ord (ListT m a)
+ Control.Monad.ListT: instance Read (m (ListItem (ListT m) a)) => Read (ListT m a)
+ Control.Monad.ListT: instance Show (m (ListItem (ListT m) a)) => Show (ListT m a)
+ Data.List.Class: instance Functor m => Functor (ListItem m)
+ Data.List.Class: mapL :: List l => (a -> ItemM l b) -> l a -> l b
- Data.List.Class: cons :: (MonadPlus m) => a -> m a -> m a
+ Data.List.Class: cons :: MonadPlus m => a -> m a -> m a
- Data.List.Class: execute :: (List l) => l a -> ItemM l ()
+ Data.List.Class: execute :: List l => l a -> ItemM l ()
- Data.List.Class: filter :: (MonadPlus m) => (a -> Bool) -> m a -> m a
+ Data.List.Class: filter :: MonadPlus m => (a -> Bool) -> m a -> m a
- Data.List.Class: foldl1L :: (List l) => (a -> a -> a) -> l a -> ItemM l a
+ Data.List.Class: foldl1L :: List l => (a -> a -> a) -> l a -> ItemM l a
- Data.List.Class: foldlL :: (List l) => (a -> b -> a) -> a -> l b -> ItemM l a
+ Data.List.Class: foldlL :: List l => (a -> b -> a) -> a -> l b -> ItemM l a
- Data.List.Class: foldrL :: (List l) => (a -> ItemM l b -> ItemM l b) -> ItemM l b -> l a -> ItemM l b
+ Data.List.Class: foldrL :: List l => (a -> ItemM l b -> ItemM l b) -> ItemM l b -> l a -> ItemM l b
- Data.List.Class: fromList :: (MonadPlus m) => [a] -> m a
+ Data.List.Class: fromList :: MonadPlus m => [a] -> m a
- Data.List.Class: iterateM :: (List l) => (a -> ItemM l a) -> ItemM l a -> l a
+ Data.List.Class: iterateM :: List l => (a -> ItemM l a) -> ItemM l a -> l a
- Data.List.Class: joinL :: (List l) => ItemM l (l a) -> l a
+ Data.List.Class: joinL :: List l => ItemM l (l a) -> l a
- Data.List.Class: joinM :: (List l) => l (ItemM l a) -> l a
+ Data.List.Class: joinM :: List l => l (ItemM l a) -> l a
- Data.List.Class: lastL :: (List l) => l a -> ItemM l a
+ Data.List.Class: lastL :: List l => l a -> ItemM l a
- Data.List.Class: repeat :: (MonadPlus m) => a -> m a
+ Data.List.Class: repeat :: MonadPlus m => a -> m a
- Data.List.Class: runList :: (List l) => l a -> ItemM l (ListItem l a)
+ Data.List.Class: runList :: List l => l a -> ItemM l (ListItem l a)
- Data.List.Class: scanl :: (List l) => (a -> b -> a) -> a -> l b -> l a
+ Data.List.Class: scanl :: List l => (a -> b -> a) -> a -> l b -> l a
- Data.List.Class: sortOn :: (Ord b) => (a -> b) -> [a] -> [a]
+ Data.List.Class: sortOn :: Ord b => (a -> b) -> [a] -> [a]
- Data.List.Class: takeWhile :: (List l) => (a -> Bool) -> l a -> l a
+ Data.List.Class: takeWhile :: List l => (a -> Bool) -> l a -> l a
- Data.List.Class: takeWhileM :: (List l) => (a -> ItemM l Bool) -> l a -> l a
+ Data.List.Class: takeWhileM :: List l => (a -> ItemM l Bool) -> l a -> l a
- Data.List.Class: toList :: (List l) => l a -> ItemM l [a]
+ Data.List.Class: toList :: List l => l a -> ItemM l [a]
- Data.List.Class: transpose :: (List l) => l (l a) -> l (l a)
+ Data.List.Class: transpose :: List l => l (l a) -> l (l a)
- Data.List.Class: zip :: (List l) => l a -> l b -> l (a, b)
+ Data.List.Class: zip :: List l => l a -> l b -> l (a, b)
- Data.List.Class: zipWith :: (List l) => (a -> b -> c) -> l a -> l b -> l c
+ Data.List.Class: zipWith :: List l => (a -> b -> c) -> l a -> l b -> l c

Files

List.cabal view
@@ -1,5 +1,5 @@ Name:                List-Version:             0.3.0+Version:             0.4.0 Category:            Control Synopsis:            List monad transformer and class Description:@@ -17,8 +17,7 @@ Library   hs-Source-Dirs:      src   Extensions:-  Build-Depends:       base >= 3 && < 5, mtl+  Build-Depends:       base >= 3 && < 5, transformers >= 0.2.0   Exposed-modules:     Control.Monad.ListT,                        Data.List.Class   Ghc-Options:         -O2 -Wall-
src/Control/Monad/ListT.hs view
@@ -7,17 +7,20 @@ -- Monadic list example: --   A program which reads numbers from the user and accumulates them. --+-- > import Control.Monad (join) -- > import Control.Monad.ListT (ListT)--- > import Data.List.Class (execute, joinM, repeat, scanl, takeWhile)+-- > import Control.Monad.Trans (lift)+-- > import Data.List.Class (execute, repeat, scanl, takeWhile, mapL) -- > import Prelude hiding (repeat, scanl, takeWhile)--- >+-- >  -- > main =--- >   execute . joinM . fmap print .--- >   scanl (+) 0 .--- >   fmap (fst . head) .--- >   takeWhile (not . null) .--- >   fmap reads .--- >   joinM $ (repeat getLine :: ListT IO (IO String))+-- >     execute . mapL print .+-- >     scanl (+) 0 .+-- >     fmap (fst . head) .+-- >     takeWhile (not . null) .+-- >     fmap reads $ do+-- >       repeat ()+-- >       lift getLine :: ListT IO String  module Control.Monad.ListT (ListT(..)) where @@ -25,11 +28,8 @@  import Control.Applicative (Applicative(..)) import Control.Monad (MonadPlus(..), ap, liftM)--- import Control.Monad.Cont.Class (MonadCont(..))-import Control.Monad.Error.Class (MonadError(..))-import Control.Monad.Reader.Class (MonadReader(..))-import Control.Monad.State.Class (MonadState(..))-import Control.Monad.Trans (MonadTrans(..), MonadIO(..))+import Control.Monad.IO.Class (MonadIO(..))+import Control.Monad.Trans.Class (MonadTrans(..)) import Data.Monoid (Monoid(..))  newtype ListT m a =@@ -79,32 +79,5 @@   runList = runListT   joinL = ListT . (>>= runList) --- YUCK:--- I can't believe I'm doing this,--- for compatability with mtl's ListT.--- I hate the O(N^2) code length auto-lifts. DRY!!- instance MonadIO m => MonadIO (ListT m) where   liftIO = lift . liftIO--{---- TODO: understand and verify this instance :)-instance MonadCont m => MonadCont (ListT m) where-  callCC f =-    ListT $ callCC thing-    where-      thing c = runListT . f $ ListT . c . (`Cons` mempty)--}--instance MonadError e m => MonadError e (ListT m) where-  throwError = lift . throwError-  catchError m = ListT . catchError (runList m) . (runList .)--instance MonadReader s m => MonadReader s (ListT m) where-  ask = lift ask-  local f = ListT . local f . runList--instance MonadState s m => MonadState s (ListT m) where-  get = lift get-  put = lift . put-
src/Data/List/Class.hs view
@@ -14,7 +14,7 @@   foldrL, foldlL, foldl1L, toList, lengthL, lastL,   merge2On, mergeOn,   -- | Operations useful for monadic lists-  execute, joinM, iterateM, takeWhileM,+  execute, joinM, mapL, iterateM, takeWhileM,   -- | Operations for non-monadic lists   sortOn,   -- | Convert between List types@@ -23,9 +23,9 @@   ) where  import Control.Monad (MonadPlus(..), liftM)-import Control.Monad.Identity (Identity(..))-import Control.Monad.State (StateT(..), evalStateT, get)+import Control.Monad.Trans.State (StateT(..), evalStateT, get) import Data.Function (fix)+import Data.Functor.Identity (Identity(..)) import Data.List (sortBy) import Data.Maybe (fromJust) import Data.Ord (comparing)@@ -140,6 +140,9 @@   where     consFunc action rest =       liftM (`cons` joinL rest) action++mapL :: List l => (a -> ItemM l b) -> l a -> l b+mapL func = joinM . liftM func  takeWhile :: List l => (a -> Bool) -> l a -> l a takeWhile = takeWhileM . fmap return