explicit-sharing-0.9: Explicit Sharing of Monadic Effects

Stabilityexperimental
MaintainerSebastian Fischer (sebf\@informatik.uni-kiel.de)

Data.Monadic.List

Description

This library provides lists with monadic head and tail as an example for nested monadic data that can be used with the combinator share for explicit sharing.

Synopsis

Documentation

data List m a Source

Data type for lists where both the head and tail are monadic.

Constructors

Nil 
Cons (m a) (m (List m a)) 

Instances

(Monad m, Convertible m a b) => Convertible m [a] (List m b)

This instance enables the function Control.Monad.Sharing.convert to transform ordinary Haskell lists into nested monadic lists.

(Monad m, Shareable m a) => Shareable m (List m a)

This instance allows to use nested monadic lists as argument to the Control.Monad.Sharing.share combinator.

(Monad m, Convertible m a b) => Convertible m (List m a) [b]

This instance enables the function Control.Monad.Sharing.convert to transform nested monadic lists into ordinary Haskell lists.

nil :: Monad m => m (List m a)Source

The empty monadic list.

cons :: Monad m => m a -> m (List m a) -> m (List m a)Source

Constructs a non-empty monadic list.

isEmpty :: Monad m => m (List m a) -> m BoolSource

Checks if monadic list is empty.

first :: MonadPlus m => m (List m a) -> m aSource

Yields the head of a monadic list. Relies on MonadPlus instance to provide a failing implementation of fail.

rest :: MonadPlus m => m (List m a) -> m (List m a)Source

Yields the tail of a monadic list. Relies on MonadPlus instance to provide a failing implementation of fail.