packages feed

List 0.5.2 → 0.6.0

raw patch · 5 files changed

+104/−108 lines, 5 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Control.Monad.ListT: runListT :: ListT m a -> m (ListItem (ListT m) a)
- Control.Monad.Trans.List: ListT :: m (ListItem (ListT m) a) -> ListT m a
- Control.Monad.Trans.List: instance Eq (m (ListItem (ListT m) a)) => Eq (ListT m a)
- Control.Monad.Trans.List: instance Monad m => Alternative (ListT m)
- Control.Monad.Trans.List: instance Monad m => Applicative (ListT m)
- Control.Monad.Trans.List: instance Monad m => Functor (ListT m)
- Control.Monad.Trans.List: instance Monad m => List (ListT m)
- Control.Monad.Trans.List: instance Monad m => Monad (ListT m)
- Control.Monad.Trans.List: instance Monad m => MonadPlus (ListT m)
- Control.Monad.Trans.List: instance Monad m => Monoid (ListT m a)
- Control.Monad.Trans.List: instance MonadIO m => MonadIO (ListT m)
- Control.Monad.Trans.List: instance MonadTrans ListT
- Control.Monad.Trans.List: instance Ord (m (ListItem (ListT m) a)) => Ord (ListT m a)
- Control.Monad.Trans.List: instance Read (m (ListItem (ListT m) a)) => Read (ListT m a)
- Control.Monad.Trans.List: instance Show (m (ListItem (ListT m) a)) => Show (ListT m a)
- Control.Monad.Trans.List: newtype ListT m a
- Control.Monad.Trans.List: runListT :: ListT m a -> m (ListItem (ListT m) a)
- Control.Monad.Trans.List.Funcs: fromList :: Monad m => [a] -> ListT m a
- Control.Monad.Trans.List.Funcs: iterateM :: Monad m => (a -> m a) -> m a -> ListT m a
- Control.Monad.Trans.List.Funcs: repeat :: Monad m => a -> ListT m a
- Control.Monad.Trans.List.Funcs: repeatM :: Monad m => m a -> ListT m a
- Data.List.Class: headL :: ListItem l a -> a
- Data.List.Class: instance (Eq a, Eq (l a)) => Eq (ListItem l a)
- Data.List.Class: instance (Ord a, Ord (l a)) => Ord (ListItem l a)
- Data.List.Class: instance (Read a, Read (l a)) => Read (ListItem l a)
- Data.List.Class: instance (Show a, Show (l a)) => Show (ListItem l a)
- Data.List.Class: instance Functor m => Functor (ListItem m)
- Data.List.Class: instance List []
- Data.List.Class: tailL :: ListItem l a -> l a
+ Control.Monad.ListT: [runListT] :: ListT m a -> m (ListItem (ListT m) a)
+ Control.Monad.ListT: instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Control.Monad.ListT.ListT m)
+ Control.Monad.ListT: instance Control.Monad.Trans.Class.MonadTrans Control.Monad.ListT.ListT
+ Control.Monad.ListT: instance GHC.Base.Monad m => Data.List.Class.List (Control.Monad.ListT.ListT m)
+ Control.Monad.ListT: instance GHC.Base.Monad m => GHC.Base.Alternative (Control.Monad.ListT.ListT m)
+ Control.Monad.ListT: instance GHC.Base.Monad m => GHC.Base.Applicative (Control.Monad.ListT.ListT m)
+ Control.Monad.ListT: instance GHC.Base.Monad m => GHC.Base.Functor (Control.Monad.ListT.ListT m)
+ Control.Monad.ListT: instance GHC.Base.Monad m => GHC.Base.Monad (Control.Monad.ListT.ListT m)
+ Control.Monad.ListT: instance GHC.Base.Monad m => GHC.Base.MonadPlus (Control.Monad.ListT.ListT m)
+ Control.Monad.ListT: instance GHC.Base.Monad m => GHC.Base.Monoid (Control.Monad.ListT.ListT m a)
+ Control.Monad.ListT: instance GHC.Classes.Eq (m (Data.List.Class.ListItem (Control.Monad.ListT.ListT m) a)) => GHC.Classes.Eq (Control.Monad.ListT.ListT m a)
+ Control.Monad.ListT: instance GHC.Classes.Ord (m (Data.List.Class.ListItem (Control.Monad.ListT.ListT m) a)) => GHC.Classes.Ord (Control.Monad.ListT.ListT m a)
+ Control.Monad.ListT: instance GHC.Read.Read (m (Data.List.Class.ListItem (Control.Monad.ListT.ListT m) a)) => GHC.Read.Read (Control.Monad.ListT.ListT m a)
+ Control.Monad.ListT: instance GHC.Show.Show (m (Data.List.Class.ListItem (Control.Monad.ListT.ListT m) a)) => GHC.Show.Show (Control.Monad.ListT.ListT m a)
+ Control.Monad.ListT.Funcs: fromList :: Monad m => [a] -> ListT m a
+ Control.Monad.ListT.Funcs: iterateM :: Monad m => (a -> m a) -> m a -> ListT m a
+ Control.Monad.ListT.Funcs: repeat :: Monad m => a -> ListT m a
+ Control.Monad.ListT.Funcs: repeatM :: Monad m => m a -> ListT m a
+ Data.List.Class: [headL] :: ListItem l a -> a
+ Data.List.Class: [tailL] :: ListItem l a -> l a
+ Data.List.Class: instance (GHC.Classes.Eq (l a), GHC.Classes.Eq a) => GHC.Classes.Eq (Data.List.Class.ListItem l a)
+ Data.List.Class: instance (GHC.Classes.Ord (l a), GHC.Classes.Ord a) => GHC.Classes.Ord (Data.List.Class.ListItem l a)
+ Data.List.Class: instance (GHC.Read.Read (l a), GHC.Read.Read a) => GHC.Read.Read (Data.List.Class.ListItem l a)
+ Data.List.Class: instance (GHC.Show.Show (l a), GHC.Show.Show a) => GHC.Show.Show (Data.List.Class.ListItem l a)
+ Data.List.Class: instance Data.List.Class.List []
+ Data.List.Class: instance GHC.Base.Functor m => GHC.Base.Functor (Data.List.Class.ListItem m)
+ Data.List.Class: type family ItemM l :: * -> *;
+ Data.List.Class: }
- Data.List.Class: class (MonadPlus l, Monad (ItemM l)) => List l where type family ItemM l :: * -> * cons = mplus . return
+ Data.List.Class: class (MonadPlus l, Monad (ItemM l)) => List l where type ItemM l :: * -> * cons = mplus . return where {

Files

List.cabal view
@@ -1,5 +1,5 @@ Name:                List-Version:             0.5.2+Version:             0.6.0 Category:            Control Synopsis:            List monad transformer and class Description:@@ -19,7 +19,6 @@   Extensions:   Build-Depends:       base >= 3 && < 5, transformers >= 0.2   Exposed-modules:     Control.Monad.ListT,-                       Control.Monad.Trans.List,-                       Control.Monad.Trans.List.Funcs,+                       Control.Monad.ListT.Funcs,                        Data.List.Class   Ghc-Options:         -O2 -Wall
src/Control/Monad/ListT.hs view
@@ -1,8 +1,82 @@--- Alternative module name to "List"'s @Control.Monad.Trans.List@.--- The name @Control.Monad.Trans.List@ conflicts with "transformers"'s broken ListT.+{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, StandaloneDeriving, TypeFamilies, UndecidableInstances #-}++-- | A list monad transformer / a monadic list. ----- Import this module and not @Control.Monad.Trans.List@ if using both packages.+-- Monadic list example:+--   A program which reads numbers from the user and accumulates them.+--+-- > import Control.Monad.ListT.Funcs (repeatM)+-- > import Data.List.Class (execute, scanl, takeWhile, mapL)+-- > import Prelude hiding (scanl, takeWhile)+-- >+-- > main =+-- >     execute . mapL print .+-- >     scanl (+) 0 .+-- >     fmap (fst . head) .+-- >     takeWhile (not . null) .+-- >     fmap reads $ repeatM getLine+--+-- Note:+-- The `transformers` package also has a `ListT` type,+-- which oddly enough it is not a list monad transformer.+-- This module was deliberately named differently from `transformers`'s module.  module Control.Monad.ListT (ListT(..)) where -import Control.Monad.Trans.List (ListT(..))+import Data.List.Class (List(..), ListItem(..), foldrL)++import Control.Applicative (Alternative(..), Applicative(..))+import Control.Monad (MonadPlus(..), ap, liftM)+import Control.Monad.IO.Class (MonadIO(..))+import Control.Monad.Trans.Class (MonadTrans(..))+import Data.Monoid (Monoid(..))++newtype ListT m a =+    ListT { runListT :: m (ListItem (ListT m) a) }++deriving instance (Eq (m (ListItem (ListT m) a))) => Eq (ListT m a)+deriving instance (Ord (m (ListItem (ListT m) a))) => Ord (ListT m a)+deriving instance (Read (m (ListItem (ListT m) a))) => Read (ListT m a)+deriving instance (Show (m (ListItem (ListT m) a))) => Show (ListT m a)++-- for mappend, fmap, bind+foldrL' :: List l => (a -> l b -> l b) -> l b -> l a -> l b+foldrL' consFunc nilFunc =+    joinL . foldrL step (return nilFunc)+    where+        step x = return . consFunc x . joinL++instance Monad m => Monoid (ListT m a) where+    mempty = ListT $ return Nil+    mappend = flip (foldrL' cons)++instance Monad m => Functor (ListT m) where+    fmap func = foldrL' (cons . func) mempty++instance Monad m => Monad (ListT m) where+    return = ListT . return . (`Cons` mempty)+    a >>= b = foldrL' mappend mempty (fmap b a)++instance Monad m => Applicative (ListT m) where+    pure = return+    (<*>) = ap++instance Monad m => Alternative (ListT m) where+    empty = mempty+    (<|>) = mappend++instance Monad m => MonadPlus (ListT m) where+    mzero = mempty+    mplus = mappend++instance MonadTrans ListT where+    lift = ListT . liftM (`Cons` mempty)++instance Monad m => List (ListT m) where+    type ItemM (ListT m) = m+    runList = runListT+    joinL = ListT . (>>= runList)+    cons x = ListT . return . Cons x++instance MonadIO m => MonadIO (ListT m) where+    liftIO = lift . liftIO
+ src/Control/Monad/ListT/Funcs.hs view
@@ -0,0 +1,24 @@+-- | @List@ functions with type limited to use @ListT@.+-- This might come useful for type interference.+--+-- Functions where the @List@ is an input type and not only the result type do not need special limited versions.++module Control.Monad.ListT.Funcs+    ( iterateM, repeatM, repeat, fromList+    ) where++import Control.Monad.ListT (ListT)+import qualified Data.List.Class as ListFuncs+import Prelude hiding (repeat)++iterateM :: Monad m => (a -> m a) -> m a -> ListT m a+iterateM = ListFuncs.iterateM++repeatM :: Monad m => m a -> ListT m a+repeatM = ListFuncs.repeatM++repeat :: Monad m => a -> ListT m a+repeat = ListFuncs.repeat++fromList :: Monad m => [a] -> ListT m a+fromList = ListFuncs.fromList
− src/Control/Monad/Trans/List.hs
@@ -1,77 +0,0 @@-{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, StandaloneDeriving, TypeFamilies, UndecidableInstances #-}---- | A list monad transformer / a monadic list.------ Monadic list example:---   A program which reads numbers from the user and accumulates them.------ > import Control.Monad.Trans.List.Funcs (repeatM)--- > import Data.List.Class (execute, scanl, takeWhile, mapL)--- > import Prelude hiding (scanl, takeWhile)--- > --- > main =--- >     execute . mapL print .--- >     scanl (+) 0 .--- >     fmap (fst . head) .--- >     takeWhile (not . null) .--- >     fmap reads $ repeatM getLine--module Control.Monad.Trans.List (ListT(..)) where--import Data.List.Class (List(..), ListItem(..), foldrL)--import Control.Applicative-import Control.Monad (MonadPlus(..), ap, liftM)-import Control.Monad.IO.Class (MonadIO(..))-import Control.Monad.Trans.Class (MonadTrans(..))-import Data.Monoid (Monoid(..))--newtype ListT m a =-    ListT { runListT :: m (ListItem (ListT m) a) }--deriving instance (Eq (m (ListItem (ListT m) a))) => Eq (ListT m a)-deriving instance (Ord (m (ListItem (ListT m) a))) => Ord (ListT m a)-deriving instance (Read (m (ListItem (ListT m) a))) => Read (ListT m a)-deriving instance (Show (m (ListItem (ListT m) a))) => Show (ListT m a)---- for mappend, fmap, bind-foldrL' :: List l => (a -> l b -> l b) -> l b -> l a -> l b-foldrL' consFunc nilFunc =-    joinL . foldrL step (return nilFunc)-    where-        step x = return . consFunc x . joinL--instance Monad m => Monoid (ListT m a) where-    mempty = ListT $ return Nil-    mappend = flip (foldrL' cons)--instance Monad m => Functor (ListT m) where-    fmap func = foldrL' (cons . func) mempty--instance Monad m => Monad (ListT m) where-    return = ListT . return . (`Cons` mempty)-    a >>= b = foldrL' mappend mempty (fmap b a)--instance Monad m => Applicative (ListT m) where-    pure = return-    (<*>) = ap--instance Monad m => MonadPlus (ListT m) where-    mzero = mempty-    mplus = mappend--instance Monad m => Alternative (ListT m) where-    (<|>) = mplus-    empty = mzero--instance MonadTrans ListT where-    lift = ListT . liftM (`Cons` mempty)--instance Monad m => List (ListT m) where-    type ItemM (ListT m) = m-    runList = runListT-    joinL = ListT . (>>= runList)-    cons x = ListT . return . Cons x--instance MonadIO m => MonadIO (ListT m) where-    liftIO = lift . liftIO
− src/Control/Monad/Trans/List/Funcs.hs
@@ -1,24 +0,0 @@--- | @List@ functions with type limited to use @ListT@.--- This might come useful for type interference.------ Functions where the @List@ is an input type and not only the result type do not need special limited versions.--module Control.Monad.Trans.List.Funcs-    ( iterateM, repeatM, repeat, fromList-    ) where--import Control.Monad.Trans.List (ListT)-import qualified Data.List.Class as ListFuncs-import Prelude hiding (repeat)--iterateM :: Monad m => (a -> m a) -> m a -> ListT m a-iterateM = ListFuncs.iterateM--repeatM :: Monad m => m a -> ListT m a-repeatM = ListFuncs.repeatM--repeat :: Monad m => a -> ListT m a-repeat = ListFuncs.repeat--fromList :: Monad m => [a] -> ListT m a-fromList = ListFuncs.fromList