generator-0.5.1: A list monad transformer and related functions.

Data.List.Class

Description

The List class and actions for lists

Synopsis

Documentation

The List typeclass

class (MonadPlus l, Monad (ItemM l)) => List l whereSource

A class for list types. Every list has an underlying monad.

Associated Types

type ItemM l :: * -> *Source

Methods

joinL :: ItemM l (l b) -> l bSource

Transform an action returning a list to the returned list

 > joinL $ Identity "hello"
 "hello"

foldrL :: (a -> ItemM l b -> ItemM l b) -> ItemM l b -> l a -> ItemM l bSource

foldr for Lists. the result and 'right side' values are monadic actions.

toListT :: l a -> ListT (ItemM l) aSource

Convert to a ListT.

Can be done with a foldrL but included in type-class for efficiency.

fromListT :: ListT (ItemM l) a -> l aSource

Convert from a ListT.

Can be done with a foldrL but included in type-class for efficiency.

Instances

List [] 
Monad m => List (ListT m) 
Monad m => List (DListT m) 

List operations for MonadPlus

cons :: MonadPlus m => a -> m a -> m aSource

Prepend an item to a MonadPlus

fromList :: MonadPlus m => [a] -> m aSource

Convert a list to a MonadPlus

 > fromList [] :: Maybe Int
 Nothing
 > fromList [5] :: Maybe Int
 Just 5

filter :: MonadPlus m => (a -> Bool) -> m a -> m aSource

filter for any MonadPlus

 > filter (> 5) (Just 3)
 Nothing

repeat :: MonadPlus m => a -> m aSource

Standard list operations

takeWhile :: List l => (a -> Bool) -> l a -> l aSource

genericTake :: (Integral i, List l) => i -> l a -> l aSource

scanl :: List l => (a -> b -> a) -> a -> l b -> l aSource

transpose :: List l => l (l a) -> l (l a)Source

zip :: List l => l a -> l b -> l (a, b)Source

zipWith :: List l => (a -> b -> c) -> l a -> l b -> l cSource

Non standard List operations

foldlL :: List l => (a -> b -> a) -> a -> l b -> ItemM l aSource

An action to do foldl for Lists

toList :: List l => l a -> ItemM l [a]Source

An action to transform a List to a list

 > runIdentity $ toList "hello!"
 "hello!"

execute :: List l => l a -> ItemM l ()Source

Execute the monadic actions in a List

joinM :: List l => l (ItemM l a) -> l aSource

Transform a list of actions to a list of their results

 > joinM [Identity 4, Identity 7]
 [4,7]

lengthL :: (Integral i, List l) => l a -> ItemM l iSource

Consume a list (execute its actions) and return its length

 > runIdentity $ lengthL [1,2,3]
 3

lastL :: List l => l a -> ItemM l aSource

Consume all items and return the last one

 > runIdentity $ lastL "hello"
 'o'

Convert between List types

convList :: (ItemM l ~ ItemM k, List l, List k) => l a -> k aSource

Convert between lists with the same underlying monad

transformListMonad :: (List l, List k) => (forall x. ItemM l x -> ItemM k x) -> l a -> k aSource

Transform the underlying monad of a list given a way to transform the monad

 > import Data.List.Tree (bfs)
 > bfs (transformListMonad (\(Identity x) -> [x, x]) "hey" :: ListT [] Char)
 "hheeeeyyyyyyyy"

liftListMonad :: (MonadTrans t, Monad (t (ItemM l)), List l) => l a -> ListT (t (ItemM l)) aSource

Lift the underlying monad of a list and transform it to a ListT.

Doing plain 'transformListMonad lift' instead doesn't give the compiler the same knowledge about the types.